Freigeben über


Gewusst wie: Asynchrones Aufrufen von WCF-Dienstvorgängen

In diesem Thema wird beschrieben, wie ein Client auf einen Dienstvorgang asynchron zugreifen kann. Der in diesem Thema behandelte Dienst implementiert die ICalculator-Schnittstelle. Der Client kann mithilfe des ereignisgesteuerten asynchronen Aufrufmodells die Vorgänge asynchron an dieser Schnittstelle aufrufen. (Weitere Informationen zur Verwendung des ereignisgesteuerten asynchronen Aufrufmodells finden Sie unter Multithreaded Programming with the Event-based Asynchronous Pattern.) Ein Beispiel für das asynchrone Implementieren eines Vorgangs in einem Dienst finden Sie unter Gewusst wie: Implementieren eines asynchronen Dienstvorgangs. Weitere Informationen zu synchronen und asynchronen Vorgängen finden Sie unter Synchrone und asynchrone Vorgänge.

Tipp

Bei Verwendung einer ChannelFactory wird das ereignisgesteuerte asynchrone Aufrufmodell nicht unterstützt. Weitere Informationen zur Verwendung asynchroner Aufrufe mit ChannelFactory finden Sie unter Gewusst wie: Asynchrones Aufrufen von Vorgängen mit einer Kanalfactory.

Vorgehensweise

So rufen Sie WCF-Dienstvorgänge asynchron auf

  1. Führen Sie das Tool ServiceModel Metadata Utility Tool (Svcutil.exe) unter Angabe der beiden Befehlsoptionen /async und /tcv:Version35 wie in folgendem Befehl dargestellt aus.

    svcutil /n:http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples https://localhost:8000/servicemodelsamples/service/mex /a /tcv:Version35
    

    Damit wird neben den synchronen Vorgängen und den standardmäßigen delegatenbasierten asynchronen Vorgängen eine WCF-Clientklasse erstellt, die Folgendes enthält:

    • Zwei <operationName>Async-Vorgänge zur Verwendung mit dem ereignisbasierten asynchronen Aufrufmodell. Beispiel:
    • Ereignisse, die nach Beendigung des Vorgangs ausgelöst werden und das Format <operationName>Completed haben, zur Verwendung mit dem ereignisbasierten asynchronen Aufrufmodell. Beispiel:
    • System.EventArgs-Typen für jeden Vorgang (im Format <operationName>CompletedEventArgs) zur Verwendung mit dem ereignisbasierten asynchronen Aufrufmodell. Beispiel:
  2. Erstellen Sie in der aufrufenden Anwendung eine Rückrufmethode, die aufgerufen wird, wenn der asynchrone Vorgang abgeschlossen ist, wie im folgenden Beispielcode dargestellt.

  3. Vor dem Aufruf des Vorgangs verwenden Sie einen generischen System.EventHandler vom Typ <operationName>EventArgs, um die Handlermethode (die im vorigen Schritt erstellt wurde) dem <operationName>Completed-Ereignis hinzuzufügen. Dann rufen Sie die <operationName>Async-Methode auf. Beispiel:

Beispiel

Tipp

Die Entwurfsrichtlinien für das ereignisbasierte asynchrone Modell besagen, dass in den Fällen, in denen mehr als ein Wert zurückgegeben wird, ein Wert in der Result-Eigenschaft und die übrigen Werte in Eigenschaften des EventArgs-Objekts zurückgegeben werden sollen. Wenn ein Client Metadaten mithilfe der ereignisbasierten asynchronen Befehlsoptionen importiert und der Vorgang mehr als einen Wert zurückgibt, dann gibt das EventArgs-Objekt infolgedessen einen Wert in der Result-Eigenschaft zurück, und die übrigen Werte werden in Eigenschaften des EventArgs-Objekts zurückgegeben. Wenn das Nachrichtenobjekt in der Result-Eigenschaft und die Rückgabewerte als Eigenschaften dieses Objekts übermittelt werden sollen, verwenden Sie die Befehlsoption /messageContract. Damit wird eine Signatur generiert, bei der die Antwortnachricht in der Result-Eigenschaft des EventArgs-Objekts zurückgegeben wird. Alle internen Rückgabewerte sind dann Eigenschaften des Antwortnachrichtenobjekts.

Siehe auch

Weitere Ressourcen

Service Contract: Asynchronous Sample