如何:异步访问托管代码中的 Web 服务

更新:2007 年 11 月

Web 服务代理类中的每个 Web 方法都具有一个异步的对应版本。代理类自动生成每个 Web 方法的异步方法和对应事件。当异步方法被调用时,它将在另一个线程上执行,并在返回时引发对应的事件。您可以为异步方法的对应事件创建一个处理程序,从而在它返回时执行代码。

使用 Visual Basic 异步调用 Web 方法

  1. 使用 WithEvents 关键字声明 Web 服务代理类的一个实例,如下所示:

    Dim WithEvents myWebService As New Service1
    
    55xs7d7f.alert_note(zh-cn,VS.90).gif说明:

    您的项目必须包含对该 Web 服务的 Web 引用。

  2. 在代码编辑器中,使用 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 代码编辑器中创建事件处理程序

  3. 使用该方法的 MethodAsync 形式调用 Web 方法。例如,如果要异步调用一个名为 HelloWorld 的 Web 方法,它将类似如下:

    HelloWorldAsync
    

    注意该方法的返回值在 EventArgs 的 Result 属性中可用。

使用 C# 异步调用 Web 方法

  1. 声明 Web 服务代理类的一个实例,如下所示:

    private localhost.Service1 myWebService = new localhost.Service1
    ();
    
    55xs7d7f.alert_note(zh-cn,VS.90).gif说明:

    您的项目必须包含对该 Web 服务的 Web 引用。

  2. 在代码编辑器中,为对应于您想要调用的方法的 MethodCompleted 事件添加事件处理程序。例如,如果要异步调用一个名为 HelloWorld 的方法,您可创建类似如下的方法:

    private void HelloWorldCompleted(Object sender, 
        localhost.HelloWorldCompletedEventArgs Completed) 
        {
            // Insert code to implement the method here
        }
    

    注意处理 MethodCompleted 事件的方法必须匹配该事件的签名。这通常需要一个表示发送方的 Object 参数和该方法的 EventArgs 的一个实例,后者驻留在与 Web 服务代理类相同的命名空间中。还可以使用代码编辑器来为您自动创建事件处理程序。有关更多信息,请参见如何:订阅和取消订阅事件(C# 编程指南)

  3. 在该类的构造函数中,向该事件的处理程序列表添加 MethodCompleted 事件处理程序,如下所示:

    private void Form1_Load(object sender, EventArgs e)
    {
        myWebService.HelloWorldCompleted += new 
        localhost.HelloWorldCompletedEventHandler(HelloWorldCompleted);
    }
    
  4. 使用该方法的 MethodAsync 形式调用 Web 方法。例如,如果要异步调用一个名为 HelloWorld 的 Web 方法,它将类似如下:

    HelloWorldAsync();
    

    注意该方法的返回值在 EventArgs 的 Result 属性中可用。

请参见

概念

与 XML Web services 进行异步通信

其他资源

在托管代码中访问 Web 服务