There are two different types of asynchronous models:
2) Using System.IAsyncResult
In either case applications can invoke an operation asynchronously even if the service is implemented synchronously.
Web services themselves running on a web server can be designed to be synchronous or asynchronous.
Only available in .NET 3.5 and is not supported when using a Channel Factory System.ServiceModel.ChannelFactory
This model can be used when using a System.ServiceModel.ClientBase object to invoke a service.
This requires adding an event handler to receive the notification of the response.
The response event is raised on the user interface thread automatically.
Using System.IAsyncResult objects
This must be used when you are using a Channel Factory
This generates a service contract in which each operation has a BEGIN method and an END method.
Cancelling a Async call
WCF has no support for cancelling async operations.
The IAsyncResult interface does not provide a Cancel method.
This is because it is difficult to provide a universal mechanism for stopping all processes gracefully.
In many implementations there can be no guarantee that the server will be able to cancel the BeginInvoke call on the Web Service proxy class.
Because a Cancel methodology will vary from implementation to implementation, exposing and implementing a Cancel method is up to the Implementer of the proxy class that exposes BeginInvoke and EndInvoke
Some of the issues / problems are discussed here:
Things to consider:
By definition a Cancel method is a request to cancel the processing of the BeginInvoke method after a desired timeout period has expired.
The client can only make a Cancel request; the server may choose not to honor it.
The client should not assume that the server has stopped processing the request completely after it receives notification that the method has been cancelled.
In other words, the client is recommended not to destroy server resources such as file objects as the server may still be actively using them.
The IsCancelled propery will be set to True if the call was cancelled and the IsCompleted property will be set to True after the server has completed processing of the call.
It is illegal for the server to use any client-supplied resources outside of the agreed-upon sharing semantics after it sets the IsCompleted property to True.
It is safe for the client to destroy the server resources after the IsCompleted property returns True.
Generated Proxy Class
This is generated automatically by the WSDL.exe and provides a wrapper around the .NET remoting functionality to enable the client to communicate with the web service.