Freigeben über


Vorgehensweise: Implementieren eines ereignisgesteuerten asynchronen Webdienstclients mit ASP.NET 2.0

Dieses Thema bezieht sich auf eine veraltete Technologie. XML-Webdienste und XML-Webdienstclients sollten nun mithilfe der folgenden Technologie erstellt werden: Windows Communication Foundation.

In Version 2.0 von .NET Framework unterstützt der vom Web Services Description Language-Tool (Wsdl.exe) generierte Proxycode das neue event-driven asynchronous programming model. Durch die Kombination des ereignisgesteuerten asynchronen Programmiermodells mit der automatischen Proxygenerierung von ASP.NET 2.0-Webclients können Sie schnell sehr leistungsfähige webdienstbasierte Webanwendungen erstellen.

In Multithreaded Programming with the Event-based Asynchronous Pattern wird ein neues Programmierungsmodell vorgestellt, das Rückrufe mithilfe von Ereignissen behandelt. Dadurch können Sie leichter Multithreadanwendungen erstellen, ohne selbst komplexen Multithreadcode implementieren zu müssen. Eine Übersicht über das neue ereignisgesteuerte asynchrone Modell finden Sie unter Event-based Asynchronous Pattern Overview. Nähere Informationen zu Clientimplementierungen mithilfe des neuen Modells finden Sie unter How to: Implement a Client of the Event-based Asynchronous Pattern.

Webdienstclients, die mit einer ASP.NET-Anwendung in Version 2.0 von .NET Framework erstellt wurden, können die Vorteile des neuen Unterverzeichnisses App_WebReferences nutzen. Dieses kann eine WSDL-Datei dynamisch in Proxycode kompilieren, wenn die ASP.NET-Clientanwendung einen XML-Webdienst aufruft, der den WSDL-Vertrag unterstützt.

Das vollständige Beispiel finden Sie im RADAsync-Schnellstart unter ASP.NET Web Services QuickStarts.

Implementieren eines ereignisgesteuerten Webdienstclients

  1. Erstellen Sie einen XML-Webdienst mit einer synchronen Webmethode, die zeitaufwändige Aufgaben ausführt, die sich zur asynchronen Ausführung anbieten.

    [WebMethod]
    public string HelloWorld() {
      Thread.Sleep(5000);
      return "Hello World";
    }
    
    <WebMethod()> _
    Public Function HelloWorld() As String 
      Thread.Sleep(5000)
    ..Return "Hello World"
    End Function
    
  2. Fügen Sie in der ASP.NET-Clientanwendung das Async-Attribut zur @ Page-Direktive hinzu, und legen Sie sie auf true fest. Verwenden Sie die @ Import-Direktive, um den System.Threading-Namespace zu importieren.

    <%@ Page Language="C#" Debug="true" Async="true" %>
    <%@ Import Namespace="System.Threading" %>
    
    <%@ Page Language="VB" Debug="true" Async="true" %>
    <%@ Import Namespace="System.Threading" %>
    
  3. Um die automatische Proxygenerierung zu nutzen, generieren Sie eine WSDL-Datei (mit dem Web Services Description Language-Tool (Wsdl.exe)) und platzieren diese Datei im Clientunterverzeichnis App_WebReferences. (Weitere Informationen finden Sie unter ASP.NET Web Site Layout.)

  4. Erstellen Sie die Webdienst-Clientanwendung wie üblich, indem Sie ein neues Objekt erstellen, für das Sie den Dienstklassennamen und die Zeichenfolge WaitService verwenden. Weisen Sie die Webdienst-URL der Url-Eigenschaft zu. Wenn der Dienstklassenname beispielsweise HelloWorld lautet, erstellt der Client ein HelloWorldWaitService-Objekt.

    HelloWorldWaitService service = new HelloWorldWaitService();
    service.Url = "https://localhost/QuickStartv20/webservices/Samples/RADAsync/cs/Server/HelloWorldWaitService.asmx";
    
    Dim service As New HelloWorldWaitService()
    service.Url = "https://localhost/QuickStartv20/webservices/Samples/RADAsync/vb/Server/HelloWorldWaitService.asmx"
    
  5. Weisen Sie im Clientanwendungscode dem Completed-Ereignis des Proxys einen Ereignishandler zu. Im folgenden Codebeispiel enthält die ASP.NET-Clientseite die HelloWorldCompleted-Methode, die aufgerufen wird, wenn die Ausführung der Webdienstmethode abgeschlossen ist.

    //Add our callback function to the event handler. 
    service.HelloWorldCompleted += this.HelloWorldCompleted; 
    
    'Add our callback function to the event handler
    AddHandler service.HelloWorldCompleted, AddressOf Me.HelloWorldCompleted
    
  6. Rufen Sie im Clientanwendungscode die Async-Methode für den Proxy auf. (Diese Methode hat den gleichen Name wie die Webmethode, jedoch ist "Async" daran angefügt. Ausführliche Informationen hierzu finden Sie unter How to: Implement a Client of the Event-based Asynchronous Pattern.) Dieser Methodenaufruf wird als synchroner Aufruf in der ASP.NET-Clientseite angezeigt, aber er wird sofort zurückgegeben. Die ASP.NET-Clientseite wird erst dann an den Browser zurückgegeben, wenn der asynchrone Aufruf abgeschlossen ist, das Completed-Ereignis des Proxys ausgelöst und die Ereignisbehandlungsmethode ausgeführt wurde.

    service.HelloWorldAsync("second call");
    
    service.HelloWorldAsync("second call")
    

Siehe auch

Weitere Ressourcen

ASP.NET Web Services QuickStarts