Gewusst wie: Implementieren eines ereignisgesteuerten asynchronen Webdienstclients mit ASP.NET 2.0
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
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
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" %>
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.)
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 beispielsweiseHelloWorld
lautet, erstellt der Client einHelloWorldWaitService
-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"
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
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
Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.