Calling an ASP.NET web service asynchronously.

When we add a web reference to a web service behind the screen wsdl.exe is run which creates the proxy class. Proxy class contains both synchronous and asynchronous flavors of each web method.For simple HelloWorld() web method following methods are there in the proxy class

Public string HelloWorld()

Public string HelloWorldAsync();

Public string HelloWorldAsync(object userState);

We call the HelloWorldAsync() method which in turn calls the following method of the proxy class InvokeAsync()

// Summary:

// Invokes the specified method asynchronously.

// Parameters:

// methodName:

// The name of the method to invoke.

// parameters:

// The parameters to pass to the method.

// callback:

// The delegate called when the method invocation has completed.

protected void InvokeAsync(string methodName, object[] parameters, SendOrPostCallback callback);

HelloWorldCompletedEventArgsThis class is also created by wsdl.exe which contains the result of our operation.

Suppose this is our simple web service, we have introduced delay to understand the asynchronous behavior.

[WebMethod]

public string HelloWorld() {

Thread.Sleep(5000);

return “Hello World”;

}

Now to call the above webservice method asynchrously in a windows application client we need to do the following

Say we have want to call the HelloWorld method asynchronously on the click of the button,

private void btnCallService_Click(object sender, EventArgs e)

{

// Create the instance of the proxy class

Service myService = new Service();

// Register an eventhandler for HelloWorldCompleted event

// The eventhandler would be called when the request is

// completed

myService.HelloWorldCompleted += new

HelloWorldCompletedEventHandler(this.HelloWorldCompleted);

// instead of calling the synchronous HelloWorld() we need

// to call the HelloWorldAsync() method

myService.HelloWorldAsync();

}

void HelloWorldCompleted(object sender,HelloWorldCompletedEventArgs args){

// Display the reutrn value

MessageBox.Show(args.Result);

}

To call the above web method in an asp.net client we need to add the following attribute in the @Page directive

Async=”true”

Bye..


Author: Nishant Rana

I love working in and sharing everything about Microsoft.NET technology !

5 thoughts on “Calling an ASP.NET web service asynchronously.”

  1. Hi have a method like this
    IWS.Index ws = new IWS.Index();// My web service
    ws.DokumaniYayinlaAsync();
    Response.Redirect(“../bsat/Main.aspx”);
    I want to redirect my page immediately but it is waiting for ws.DokumaniYayinlaAsync();
    How can I fix this problem.
    Thank you…

    Like

Share your thoughts

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s