HOW TO:以 Managed 程式碼非同步存取 Web 服務
更新:2007 年 11 月
在 Web 服務 Proxy 類別上的每個 Web 方法都有一個對應的非同步方法。Proxy 類別會自動產生每個 Web 方法的非同步方法以及一個對應的事件。呼叫非同步方法時,會在另一個執行緒上執行該非同步方法,並在返回時引發對應事件。您可以為對應的事件建立處理常式,以在非同步方法傳回時執行程式碼。
用 Visual Basic 非同步呼叫 Web 方法
使用 WithEvents 關鍵字來宣告 Web 服務 Proxy 類別的執行個體,如下所示:
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 引數來表示傳送端、一個存在於與 Web 服務 Proxy 類別相同的命名空間的方法之 EventArgs 執行個體。您也可以使用「程式碼編輯器」來自動建立事件處理常式。如需詳細資訊,請參閱 HOW TO:在 Visual Basic 程式碼編輯器中建立事件處理常式。
使用方法的 MethodAsync 格式呼叫 Web 方法。例如,如果您已經非同步地呼叫 Web 方法 HelloWorld,看起來會如下所示:
HelloWorldAsync
請注意,方法的傳回值可在 EventArgs 的 Result 屬性中取得。
用 C# 非同步地呼叫 Web 方法
宣告 Web 服務 Proxy 類別的執行個體,如下所示:
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 引數來表示傳送端、一個存在於與 Web 服務 Proxy 類別相同的命名空間的方法之 EventArgs 執行個體。您也可以使用「程式碼編輯器」來自動建立事件處理常式。如需詳細資訊,請參閱 HOW TO:訂閱及取消訂閱事件 (C# 程式設計手冊)。
在類別的建構函式中,新增 MethodCompleted 事件處理常式至該事件的處理常式清單中,如下所示:
private void Form1_Load(object sender, EventArgs e) { myWebService.HelloWorldCompleted += new localhost.HelloWorldCompletedEventHandler(HelloWorldCompleted); }
使用方法的 MethodAsync 格式呼叫 Web 方法。例如,如果您已經非同步地呼叫 Web 方法 HelloWorld,看起來會如下所示:
HelloWorldAsync();
請注意,方法的傳回值可在 EventArgs 的 Result 屬性中取得。