HOW TO:非同步呼叫 Web 服務
更新:2007 年 11 月
這個範例會將處理常式附加至 Web 服務的非同步處理常式事件,因此它可以擷取非同步方法呼叫的結果。這個範例會使用 http://www.xmethods.net 中的 DemoTemperatureService Web 服務。
在 Visual Studio 整合式開發環境 (IDE) 中參考專案的 Web 服務時,服務會加入至 My.WebServices 物件,而 IDE 會產生用戶端 Proxy 類別 (Class),以存取特定的 Web 服務。
Proxy 類別可以同步呼叫 Web 服務方法,在這種情況下,應用程式會等候函式完成後再繼續執行。此外,Proxy 也會建立其他的成員,以協助非同步呼叫方法。Proxy 會針對每個 Web 服務函式 NameOfWebServiceFunction,建立 NameOfWebServiceFunctionAsync 副程式、NameOfWebServiceFunctionCompleted 事件和 NameOfWebServiceFunctionCompletedEventArgs 類別。這個範例會使用非同步成員存取 DemoTemperatureService Web 服務的 getTemp 函式。
注意事項: |
---|
因為 ASP.NET 不支援 My.WebServices 物件,因此,這個程式碼無法在 Web 應用程式中運作。 |
若要非同步呼叫 Web 服務
請參考 http://www.xmethods.net 上的 DemoTemperatureService Web 服務,網址為:
http://www.xmethods.net/sd/2001/DemoTemperatureService.wsdl
如需詳細資訊,請參閱 HOW TO:以 Managed 程式碼存取 Web 服務。
加入 getTempCompleted 事件的事件處理常式:
Private Sub getTempCompletedHandler(ByVal sender As Object, _ ByVal e As net.xmethods.www.getTempCompletedEventArgs) MsgBox("Temperature: " & e.Result) End Sub
注意事項: 您無法使用 Handles 陳述式 (Statement),將事件處理常式和 My.WebServices 物件的事件產生關聯。
加入欄位,以追蹤事件處理常式是否已加入至 getTempCompleted 事件:
Private handlerAttached As Boolean = False
視需要加入方法,以便將事件處理常式加入至 getTempCompleted 事件,並呼叫 getTempAsynch 方法:
Sub CallGetTempAsync(ByVal zipCode As Integer) If Not handlerAttached Then AddHandler _ My.WebServices.TemperatureService.getTempCompleted, _ AddressOf Me.TS_getTempCompleted handlerAttached = True End If My.WebServices.TemperatureService.getTempAsync(zipCode) End Sub
若要非同步呼叫 getTemp Web 方法,請呼叫 CallGetTempAsync 方法。當 Web 方法完成時,它的傳回值會傳遞至 getTempCompletedHandler 事件處理常式。