Gewusst wie: Asynchrones Aufrufen eines Webdiensts (Visual Basic)
Dieses Beispiel hängt einen Handler an das asynchrone Handlerereignis eines Webdiensts an, sodass dieses das Ergebnis eines asynchronen Methodenaufrufs abrufen kann. Dieses Beispiel verwendet den Webdienst DemoTemperatureService unter http://www.xmethods.net
.
Wenn Sie im Projekt in der integrierten Entwicklungsumgebung (Integrated Development Environment, IDE) von Visual Studio auf einen Webdienst verweisen, wird dieser dem My.WebServices
-Objekt hinzugefügt und die IDE generiert eine Client-Proxyklasse für den Zugriff auf einen festgelegten Webdienst.
Mit der Proxyklasse ist es möglich, die Webdienstmethoden synchron aufzurufen, während die Anwendung darauf wartet, dass die Funktion abgeschlossen wird. Außerdem erstellt das Proxy weitere Member zur asynchronen Unterstütztung der Methode. Für jede Webdienstfunktion, NameOfWebServiceFunction, erstellt das Proxy eine NameOfWebServiceFunctionAsync
-Unterroutine, ein NameOfWebServiceFunctionCompleted
-Ereignis und eine NameOfWebServiceFunctionCompletedEventArgs
-Klasse. Dieses Beispiel demonstriert, wie Sie die asynchronen Member für den Zugriff auf die getTemp
-Funktion des Webdiensts DemoTemperatureService verwenden.
Hinweis
Dieser Code funktioniert nicht in Webanwendungen, denn ASP.NET unterstützt nicht das Objekt My.WebServices
.
Asynchrones Aufrufen eines Webdiensts
Referenzieren Sie den Webdienst DemoTemperatureService unter
http://www.xmethods.net
. Die Adresse lautethttp://www.xmethods.net/sd/2001/DemoTemperatureService.wsdl
Fügen Sie einen Ereignishandler für das
getTempCompleted
-Ereignis hinzu:Private Sub getTempCompletedHandler(ByVal sender As Object, ByVal e As net.xmethods.www.getTempCompletedEventArgs) MsgBox("Temperature: " & e.Result) End Sub
Hinweis
Die Anweisung
Handles
lässt sich nicht für das Zuordnen eines Ereignishandlers zu den Ereignissen desMy.WebServices
-Objekts verwenden.Fügen Sie ein Feld hinzu um nachverfolgen zu können, ob der Ereignishandler dem
getTempCompleted
-Ereignis hinzugefügt wurde:Private handlerAttached As Boolean = False
Fügen Sie eine Methode hinzu, um den Ereignishandler zum
getTempCompleted
-Ereignis hinzufügen – sofern nötig – und zum Aufruf dergetTempAsync
-Methode: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
Für einen asynchronen Aufruf der
getTemp
-Webmethode rufen Sie dieCallGetTempAsync
-Methode auf. Wenn die Webmethode fertig ist, wird ihr Rückgabewert an dengetTempCompletedHandler
-Ereignishandler übergeben.