Gewusst wie: Asynchrones Zugreifen auf einen Webdienst in verwaltetem Code

Aktualisiert: November 2007

Jede Web-Methode auf einer Webdienstproxyklasse verfügt über ein asynchrones Äquivalent. Die Proxyklasse generiert für jede Web-Methode automatisch asynchrone Methoden und ein entsprechendes Ereignis. Beim Aufrufen der asynchronen Methode wird diese auf einem anderen Thread ausgeführt und löst bei Rückgabe das entsprechende Ereignis aus. Sie können den Code bei der Rückgabe einer asynchronen Methode ausführen, indem Sie für das entsprechende Ereignis einen Handler erstellen.

So rufen Sie asynchron mit Visual Basic eine Web-Methode auf

  1. Deklarieren Sie mit dem WithEvents-Schlüsselwort eine Instanz der Webdienstproxyklasse, wie unten dargestellt:

    Dim WithEvents myWebService As New Service1
    
    Hinweis:

    Das Projekt muss einen Webverweis auf den Webdienst enthalten.

  2. Erstellen Sie im Code-Editor mit dem Handles-Schlüsselwort einen Ereignishandler für das MethodCompleted-Ereignis, das der aufzurufenden Methode entspricht. Wenn Sie z. B. eine als HelloWorld bezeichnete Methode asynchron aufrufen, erstellen Sie eine Methode ähnlich der folgenden:

    Private Sub HelloWorldComplete(ByVal sender As Object, _
       ByVal completed As localhost.HellowWorldCompletedEventArgs) _
       Handles myWebService.HelloWorldCompleted
    ' Insert code to implement the method here
    End Sub
    

    Beachten Sie, dass die Methode, die das MethodCompleted-Ereignis verarbeitet, mit der Signatur des Ereignisses übereinstimmen muss. Dazu ist in der Regel ein Objekt-Argument erforderlich, das den Absender darstellt, sowie eine Instanz von EventArgs der Methode, die sich in demselben Namespace wie die Webdienstproxyklasse befinden. Sie können Ereignishandler mit dem Code-Editor auch automatisch erstellen. Weitere Informationen finden Sie unter Gewusst wie: Erstellen von Ereignishandlern im Visual Basic-Code-Editor.

  3. Rufen Sie mit dem MethodAsync-Formular der Methode die Web-Methode auf. Wenn Sie z. B. eine als HelloWorld bezeichnete Methode asynchron aufrufen, sieht das aus wie folgt:

    HelloWorldAsync
    

    Beachten Sie, dass der Rückgabewert der Methode in der Result-Eigenschaft von EventArgs verfügbar ist.

So rufen Sie mit C# asynchron eine Web-Methode auf

  1. Deklarieren Sie eine Instanz der Webdienstproxyklasse, wie unten dargestellt:

    private localhost.Service1 myWebService = new localhost.Service1
    ();
    
    Hinweis:

    Das Projekt muss einen Webverweis auf den Webdienst enthalten.

  2. Fügen Sie im Code-Editor einen Ereignishandler für das MethodCompleted-Ereignis hinzu, das der aufzurufenden Methode entspricht. Wenn Sie z. B. eine als HelloWorld bezeichnete Methode asynchron aufrufen, erstellen Sie eine Methode ähnlich der folgenden:

    private void HelloWorldCompleted(Object sender, 
        localhost.HelloWorldCompletedEventArgs Completed) 
        {
            // Insert code to implement the method here
        }
    

    Beachten Sie, dass die Methode, die das MethodCompleted-Ereignis verarbeitet, mit der Signatur des Ereignisses übereinstimmen muss. Dazu ist in der Regel ein Objekt-Argument erforderlich, das den Absender darstellt, sowie eine Instanz von EventArgs der Methode, die sich in demselben Namespace wie die Webdienstproxyklasse befinden. Sie können Ereignishandler mit dem Code-Editor auch automatisch erstellen. Weitere Informationen finden Sie unter Gewusst wie: Abonnieren von Ereignissen und Kündigen von Ereignisabonnements (C#-Programmierhandbuch).

  3. Fügen Sie im Konstruktor für die Klasse der Handlerliste für dieses Ereignis den MethodCompleted-Ereignishandler hinzu, wie nachfolgend dargestellt:

    private void Form1_Load(object sender, EventArgs e)
    {
        myWebService.HelloWorldCompleted += new 
        localhost.HelloWorldCompletedEventHandler(HelloWorldCompleted);
    }
    
  4. Rufen Sie mit dem MethodAsync-Formular der Methode die Web-Methode auf. Wenn Sie z. B. eine als HelloWorld bezeichnete Methode asynchron aufrufen, sieht das aus wie folgt:

    HelloWorldAsync();
    

    Beachten Sie, dass der Rückgabewert der Methode in der Result-Eigenschaft von EventArgs verfügbar ist.

Siehe auch

Konzepte

Asynchrones Kommunizieren mit XML-Webdiensten

Weitere Ressourcen

Zugriff auf Webdienste in verwaltetem Code