Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Thema wird beschrieben, wie ein Client auf einen Dienstvorgang asynchron zugreifen kann, wenn eine auf ChannelFactory basierende Clientanwendung verwendet wird. (Wenn Sie ein System.ServiceModel.ClientBase-Objekt verwenden, um einen Dienst aufzurufen, können Sie das ereignisgesteuerte asynchrone Aufrufmodell verwenden. Weitere Informationen finden Sie unter Gewusst wie: Asynchrones Aufrufen von WCF-Dienstvorgängen. Weitere Informationen über die Verwendung des ereignisgesteuerten asynchronen Aufrufmodells finden Sie unter Multithreaded Programming with the Event-based Asynchronous Pattern.
Der in diesem Thema behandelte Dienst implementiert die ICalculator-Schnittstelle. Der Client kann die Vorgänge an dieser Schnittstelle asynchron aufrufen. Dies bedeutet, dass Vorgänge wie Add in zwei Methoden aufgeteilt werden, BeginAdd und EndAdd, wobei die erste den Aufruf einleitet und die zweite das Ergebnis abruft, wenn der Vorgang abgeschlossen ist. Ein Beispiel für das asynchrone Implementieren eines Vorgangs in einem Dienst finden Sie unter Gewusst wie: Implementieren eines asynchronen Dienstvorgangs. Einzelheiten zu synchronen und asynchronen Vorgängen finden Sie unter Synchrone und asynchrone Vorgänge.
Vorgehensweise
So rufen Sie WCF-Dienstvorgänge asynchron auf
Führen Sie das ServiceModel Metadata Utility Tool (Svcutil.exe)-Tool mit der /async-Option wie in folgendem Befehl dargestellt aus.
svcutil /n:http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples https://localhost:8000/servicemodelsamples/service/mex /aDies generiert eine asynchrone Clientversion des Dienstvertrags für den Vorgang.
Erstellen Sie eine Rückruffunktion, die aufgerufen wird, wenn der asynchrone Vorgang abgeschlossen ist, wie im folgenden Beispielcode dargestellt.
Zum asynchronen Aufrufen eines Dienstvorgangs erstellen Sie den Client, rufen Sie
Begin[Operation]auf (z. B.BeginAdd), und geben Sie eine Rückruffunktion an, wie in folgendem Beispielcode dargestellt.Wenn die Rückruffunktion ausgeführt wird, ruft der Client
End<operation>(z. B.EndAdd) auf, um das Ergebnis abzurufen.
Beispiel
Der Dienst, der mit dem im vorhergehenden Verfahren genutzten Clientcode verwendet wird, implementiert die ICalculator-Schnittstelle, wie im folgenden Beispielcode gezeigt. Auf der Seite des Diensts werden die Add- und Subtract-Vorgänge des Vertrags synchron von der Windows Communication Foundation (WCF)-Laufzeit aufgerufen, auch wenn die vorangegangenen Schritte auf dem Client asynchron aufgerufen wurden. Die Multiply- und Divide-Vorgänge werden verwendet, um den Dienst asynchron auf der Seite des Diensts aufzurufen, auch wenn der Client sie synchron aufruft. Im folgenden Beispiel wird die AsyncPattern-Eigenschaft auf true festgelegt. Diese Eigenschaftseinstellung in Verbindung mit der Implementierung des asynchronen .NET Framework-Musters weist die Laufzeit an, den Vorgang asynchron aufzurufen.