i posted this same query in msdn forums but i thought i'd also ask here 
Hi everyone!
We have an existing WCF service using BasicHttpBinding (for backward compatibility with .NET 2.0 clients) that performs a potentially long database search operation and returns an array of objects to the caller. We previously addressed the problem with a search taking very long by breaking it into "pages", meaning only a subset of the search is performed at a time. It worked OK but it is far from optimal because the database backend would perform the entire complex SELECT query and just return a subset of the results for every page request.
Now that we've confirmed our users are capable of .NET 3.0, we are planning on transitioning to full WCF. We plan to use the wsDualHttpBinding so we can continue to host our service using IIS, then utilise callbacks so that the client will only trigger a search operation once, and the server/service will periodically call the client back, handing over a few hundred or thousand records from the result set at a time. The service operations and callbacks will be one-way calls only.
I've come up with an initial implementation so that the service, upon receiving the search request, will spin a background thread to perform the long database operation. This same background thread will be iterating through the datareader and will periodically call a callback operation to give partial results to the client.
Do you think this is a good idea, and will this be safe? During my tests I've noticed that sometimes the db will issue a weird SqlException saying a "severe error occurred." And there are times the search request would seemingly not be received at all by the IIS 6.0 web server. Is this probably due to processes or threads being terminated/recycled by the web server even while it's processing?
I'd like to find out your thoughts on this before I proceed with this implementation so I can correct these issues. Thanks for your inputs 