共用方式為


HOW TO:以 Managed 程式碼非同步存取 Web 服務

更新:2007 年 11 月

在 Web 服務 Proxy 類別上的每個 Web 方法都有一個對應的非同步方法。Proxy 類別會自動產生每個 Web 方法的非同步方法以及一個對應的事件。呼叫非同步方法時,會在另一個執行緒上執行該非同步方法,並在返回時引發對應事件。您可以為對應的事件建立處理常式,以在非同步方法傳回時執行程式碼。

用 Visual Basic 非同步呼叫 Web 方法

  1. 使用 WithEvents 關鍵字來宣告 Web 服務 Proxy 類別的執行個體,如下所示:

    Dim WithEvents myWebService As New Service1
    
    注意事項:

    您的專案必須包含 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 引數來表示傳送端、一個存在於與 Web 服務 Proxy 類別相同的命名空間的方法之 EventArgs 執行個體。您也可以使用「程式碼編輯器」來自動建立事件處理常式。如需詳細資訊,請參閱 HOW TO:在 Visual Basic 程式碼編輯器中建立事件處理常式

  3. 使用方法的 MethodAsync 格式呼叫 Web 方法。例如,如果您已經非同步地呼叫 Web 方法 HelloWorld,看起來會如下所示:

    HelloWorldAsync
    

    請注意,方法的傳回值可在 EventArgs 的 Result 屬性中取得。

用 C# 非同步地呼叫 Web 方法

  1. 宣告 Web 服務 Proxy 類別的執行個體,如下所示:

    private localhost.Service1 myWebService = new localhost.Service1
    ();
    
    注意事項:

    您的專案必須包含 Web 服務的 Web 參考。

  2. 在「程式碼編輯器」中,新增與您希望呼叫的方法對應的 MethodCompleted 事件之事件處理常式。例如,如果您已經非同步地呼叫 HelloWorld 方法,則必須建立一個與以下相似的方法:

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

    請注意,處理 MethodCompleted 事件的方法必須與事件簽章符合。這通常需要一個 Object 引數來表示傳送端、一個存在於與 Web 服務 Proxy 類別相同的命名空間的方法之 EventArgs 執行個體。您也可以使用「程式碼編輯器」來自動建立事件處理常式。如需詳細資訊,請參閱 HOW TO:訂閱及取消訂閱事件 (C# 程式設計手冊)

  3. 在類別的建構函式中,新增 MethodCompleted 事件處理常式至該事件的處理常式清單中,如下所示:

    private void Form1_Load(object sender, EventArgs e)
    {
        myWebService.HelloWorldCompleted += new 
        localhost.HelloWorldCompletedEventHandler(HelloWorldCompleted);
    }
    
  4. 使用方法的 MethodAsync 格式呼叫 Web 方法。例如,如果您已經非同步地呼叫 Web 方法 HelloWorld,看起來會如下所示:

    HelloWorldAsync();
    

    請注意,方法的傳回值可在 EventArgs 的 Result 屬性中取得。

請參閱

概念

以非同步方式與 XML Web Service 通訊

其他資源

以 Managed 程式碼存取 Web 服務