如何:异步访问托管代码中的 Web 服务
更新:2007 年 11 月
Web 服务代理类中的每个 Web 方法都具有一个异步的对应版本。代理类自动生成每个 Web 方法的异步方法和对应事件。当异步方法被调用时,它将在另一个线程上执行,并在返回时引发对应的事件。您可以为异步方法的对应事件创建一个处理程序,从而在它返回时执行代码。
使用 Visual Basic 异步调用 Web 方法
使用 WithEvents 关键字声明 Web 服务代理类的一个实例,如下所示:
Dim WithEvents myWebService As New Service1
说明: 您的项目必须包含对该 Web 服务的 Web 引用。
在代码编辑器中,使用 Handles 关键字为对应于您想要调用的方法的 MethodCompleted 事件创建事件处理程序。例如,如果要异步调用一个名为 HelloWorld 的方法,您可创建类似如下的方法:
Private Sub HelloWorldComplete(ByVal sender As Object, _ ByVal completed As localhost.HellowWorldCompletedEventArgs) _ Handles myWebService.HelloWorldCompleted ' Insert code to implement the method here End Sub
注意处理 MethodCompleted 事件的方法必须匹配该事件的签名。这通常需要一个表示发送方的 Object 参数和该方法的 EventArgs 的一个实例,后者驻留在与 Web 服务代理类相同的命名空间中。还可以使用代码编辑器来为您自动创建事件处理程序。有关更多信息,请参见 如何:在 Visual Basic 代码编辑器中创建事件处理程序。
使用该方法的 MethodAsync 形式调用 Web 方法。例如,如果要异步调用一个名为 HelloWorld 的 Web 方法,它将类似如下:
HelloWorldAsync
注意该方法的返回值在 EventArgs 的 Result 属性中可用。
使用 C# 异步调用 Web 方法
声明 Web 服务代理类的一个实例,如下所示:
private localhost.Service1 myWebService = new localhost.Service1 ();
说明: 您的项目必须包含对该 Web 服务的 Web 引用。
在代码编辑器中,为对应于您想要调用的方法的 MethodCompleted 事件添加事件处理程序。例如,如果要异步调用一个名为 HelloWorld 的方法,您可创建类似如下的方法:
private void HelloWorldCompleted(Object sender, localhost.HelloWorldCompletedEventArgs Completed) { // Insert code to implement the method here }
注意处理 MethodCompleted 事件的方法必须匹配该事件的签名。这通常需要一个表示发送方的 Object 参数和该方法的 EventArgs 的一个实例,后者驻留在与 Web 服务代理类相同的命名空间中。还可以使用代码编辑器来为您自动创建事件处理程序。有关更多信息,请参见如何:订阅和取消订阅事件(C# 编程指南)。
在该类的构造函数中,向该事件的处理程序列表添加 MethodCompleted 事件处理程序,如下所示:
private void Form1_Load(object sender, EventArgs e) { myWebService.HelloWorldCompleted += new localhost.HelloWorldCompletedEventHandler(HelloWorldCompleted); }
使用该方法的 MethodAsync 形式调用 Web 方法。例如,如果要异步调用一个名为 HelloWorld 的 Web 方法,它将类似如下:
HelloWorldAsync();
注意该方法的返回值在 EventArgs 的 Result 属性中可用。