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

  1. Referenzieren Sie den Webdienst DemoTemperatureService unter http://www.xmethods.net. Die Adresse lautet

    http://www.xmethods.net/sd/2001/DemoTemperatureService.wsdl
    
  2. 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 des My.WebServices-Objekts verwenden.

  3. 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
    
  4. Fügen Sie eine Methode hinzu, um den Ereignishandler zum getTempCompleted-Ereignis hinzufügen – sofern nötig – und zum Aufruf der getTempAsync-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 die CallGetTempAsync-Methode auf. Wenn die Webmethode fertig ist, wird ihr Rückgabewert an den getTempCompletedHandler-Ereignishandler übergeben.

Weitere Informationen