WindowsDevCenter.com
oreilly.comSafari Books Online.Conferences.

advertisement


AddThis Social Bookmark Button

Calling Web Services Asynchronously
Pages: 1, 2, 3

Asynchronous Call using WaitHandle

This approach utilizes a different technique, in that we have a wait handle object. This object will wait until the web service returns. When the parent thread gets to the function WaitOne (or WaitAll or WaitOne), it waits for the web service to return. After the web service returns the results, then the parent thread process will continue.



string mLangInput = "English";

// Create an instance of the WebService
localhost.MyAsyncWebService webServ =  
new localhost.MyAsyncWebService();

// Create an IAsyncResult object to hold results
IAsyncResult asyncResult;


// Make an Asynchronous Call
asyncResult = webServ.BeginMyWebMethod
  (this.mLangInput, null, null);

// Do something while the WebService is doing its work
str1 = "Doing some work while the WebService is being called.";

// Call WaitHandle to wait for the web service method to return
WaitHandle wtHandle = asyncResult.AsyncWaitHandle;
wtHandle.WaitOne();

// Get the Result of the WebMethod (this occurs when 
// WebService finished processing)
mLangResult = webServ.EndMyWebMethod(asyncResult);

// Display the results in a label
Label1.Text = str1 + this.mLangResult;

This process uses the Begin<WebServiceMethod> (BeginMyWebMethod) and assigns the result to the IAsyncResult instance, passing in method parameters and null values for Callback and asyncState (as callback is not used). The WaitOne() method causes the thread to wait for the results from the web service. When the results from the web service are ready, then End<WebServiceMethod> (EndMyWebMethod) is called to retrieve the results.

Asynchronous Call (Fire and Forget)

Very often, there can arise certain situations where a web method does not return any value. Also, a process may need to be kicked off the web server without waiting for the results. We can better illustrate this with the help of the following example. We will create an XML file using the CreateXmlFile web method, passing in a value. Note: if there is any error while creating an XML file at the web service end, then the web application cannot be notified, as the results are not returned to the web app from the web service.

// WebService web method
using System.Web.Services.Protocols;

[SoapDocumentMethod(OneWay=true)]
[WebMethod()]
public void CreateXMLFile(string lang) //No return value
{
  //. . . . . . . . . . . 
}

Client Call:

string mLangsInput = "English";

// Create an instance of the WebService
localhost.MyAsyncWebService webServ = 
	new localhost.MyAsyncWebService();

// Make a Web Method Call to create an XMLFile
webServ.CreateXMLFile(mLangInput);

// Do some process while the web service is processing the request
System.Threading.Thread.Sleep(10000);

To support fire-and-forget method calls, web methods should have an attribute SoapDocumentMethod, with the OneWay attribute set to true. SoapDocumentMethod resides in the System.Web.Services.Protocols namespace; make sure that this namespace was used in the web service. Fire and forget methods cannot have any return values, as the client does not expect any results. When you use fire and forget web methods, it does not really matter whether you have chosen an asynchronous or synchronous process, as the parent thread does not wait for the results.

Pages: 1, 2, 3

Next Pagearrow