這個範例會將處理常式附加至 XML Web Service 的非同步處理常式事件,因此它可以擷取非同步方法呼叫的結果。這個範例會使用 http://www.xmethods.net 中的 DemoTemperatureService Web 服務。
當您在 Visual Studio 整合式開發環境 (IDE) 的專案中參考 Web 服務時,它會加入至 My.WebServices 物件,而 IDE 會產生用戶端 Proxy 類別,用以存取特定的 Web 服務。
Proxy 類別可以同步呼叫 Web 服務方法,在這種情況下,應用程式會等候函式完成後再繼續執行。此外,Proxy 也會建立其他的成員,以協助非同步呼叫方法。針對每個 Web 服務函式 NameOfWebServiceFunction,Proxy 會建立 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 程式碼建立的 XML Web Service。
-
加入 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 事件處理常式。
請參閱