Rückrufe mit HTTP-Protokoll werden als Composite-Duplex-Kommunikation (WS-DualHttpBidning) implementiert. Es bedeutet, dass sich beide Seiten auf unterschiedlichen Transportverbindungen gegenseitig anrufen. Wenn der Client den Dienst aufruft, sendet er eine HTTP-Anforderung. Der Dienst verarbeitet die Anforderung und speichert einen Rückrufkanal für die spätere Verwendung. Dann gibt es eine HTTP-Antwort zurück, die nur die initiierende Anfrage bestätigt. Es löst keinen Rückruf aus. Der Callback wird vom Service durch Aufruf der Operation auf dem Callback-Kanal ausgelöst. Es erstellt eine HTTP-Anfrage, die vom Server an den Client gesendet wird. Der Client führt eine Rückrufoperation aus und gibt eine HTTP-Antwort an den Server zurück.
Dieser Kommunikationsfluss verwendet ein Zweiwege-Nachrichtenaustauschmuster, aber Duplexkommunikation verwendet normalerweise Einwegnachrichten. Der Server kann den Client-Rückruf so oft aufrufen, wie er benötigt (die Auswirkungen von Client- und Inaktivitätszeitlimit beeinflussen dies).
Für die Duplex-Kommunikation müssen sowohl Client als auch Server erreichbar sein (Firewall-Einstellungen für beide Seiten). Auf dem HTTP-Client wird ein eigener Endpunkt angezeigt, der sich wie ein anderer Webdienst verhält. Im Gegensatz dazu hat net.tcp einen Vollduplex-Kommunikationskanal, so dass sowohl Server-Anrufe als auch Rückruf-Cqlls auf derselben TCP-Verbindung ausgeführt werden.
Edit:
Sorry, ich habe Ihre Frage nicht verstehen. Async-Vorgänge (AsyncPattern) sind auf dem Server implementiert - die Implementierung erfolgt vollständig vom Client aus (umschlossen von der WCF-Dienstarchitektur). Der Client kommuniziert im allgemeinen HTTP-Anfrage/Antwort-Muster, und der Dienst kann für jede Anfrage nur eine einzige Antwort senden.
WCF unterstützt zwei asynchrone Verarbeitungsebenen - Async-Aufrufe und Async-Vorgänge. Ersteres ist auf dem Client implementiert und Dienst weiß nichts darüber, das spätere ist auf dem Dienst implementiert und der Client weiß nichts darüber. Diese Ansätze werden oft in Beispielen kombiniert, die Verwirrung stiften können.
Jeder Ansatz hat seinen eigenen Ansatz. Async-Aufrufe ermöglichen den nicht blockierenden Dienstaufruf, bei dem der Client andere Vorgänge ausführen kann, während der Dienst die Anforderung verarbeitet (die Benutzeroberfläche friert nicht ein). Asynchrone Operationen dienen der besseren Skalierbarkeit von stark genutzten Diensten.Sync-Ausführung blockiert den WCF-Verarbeitungsthread, bis die Ausführung abgeschlossen ist, während die asynchrone Ausführung das Zurückgeben des Verarbeitungsthreads an den Threadpool ermöglicht (damit eine andere Anforderung verarbeitet werden kann), während der Vorgang zeitaufwendige Operationen ausführt - normalerweise IO- oder Netzwerkkommunikation.
+1 Jetzt, da ich verstehe, dass Sie über async Implementierung von Operationen auf der Service-Seite gefragt habe, merke ich, dass "was ist der Callback-Parameter" und "Was sind die Regeln für was die Service-Implementierung sollte damit tun - z Was passiert, wenn ich zweimal aufrufe? " sind sehr interessante Fragen. Siehe http://piers7.blogspot.com/2009/09/implementing-asynchronous-operations-in.html für ein bisschen mehr dazu. Eine Sache, die ich denke, ist klar: der Rückruf ruft nicht clientseitigen Code auf - es ist Code im WCF-Service-Dispatcher-Stack. –