2008-09-12 6 views
10

Würde die Verwendung von WSDualHttpBinding für Duplex-Rückrufe in realen Szenarien funktionieren? Nehmen wir an, ich habe eine .NET-Anwendung, die einen zufälligen Port verwendet, wäre der Dienst in der Lage, die Basisadressen und den Port des Clients für Rückrufe aufzulösen?WSDualHttpBinding für Duplex-Rückrufe

Antwort

35

Eine vollständige Antwort auf Ihre Frage hängt davon ab, ob das "reale Szenario" entweder ein Intranet- oder ein Internet-Szenario ist. Obwohl WSDualHttpBinding in beiden Szenarien funktioniert es Besonderheiten bewusst zu sein, sind von:

Intranet

WSDualHttpBinding mit Ihrer .NET-Anwendung unter Verwendung eines vorkonfigurierten benutzerdefinierten Port in einem Intranet-Szenario arbeiten und „Ja“, wird der Dienst sein in der Lage, die Basisadressen und den Port des Clients für Rückrufe aufzulösen: genau wie unten erklärt wird. Der Grund dafür ist, dass WSDualHttpBinding hauptsächlich für die Verwendung über das Internet konzipiert ist.

Duplex-Callbacks in einem Intranet-Szenario, wenn WCF sowohl auf Client als auch auf Server verwendet werden kann, wird am besten mit NetTcpBinding oder NetNamedPipeBinding erreicht. Diese Bindungen verwenden TCP und ICP als Transport (anstatt HTTP) und eine benutzerdefinierte Binärcodierung, weshalb WCF auf beiden Seiten benötigt wird. Bei Rückrufen an den Client wird derselbe Kanal, der für die Verbindung mit dem Dienst über das Binding verwendet wurde, erneut verwendet, ohne dass ein neuer Port geöffnet werden muss.

Internet

In einem Internet-Szenario nur gültige HTTP-Anfragen und Antworten in einer Richtung bewegen, wird HTTP als Protokoll Einweg gestaltet. Bei der Verwendung von WSDualHttpBinding erstellt WCF daher einen separaten HTTP-Kanal für Rückrufe. Als Antwort auf Ihre zweite Frage: Die Zieladresse für diesen Rückruf an den Client setzt sich standardmäßig aus dem Host-Namen des Client-Rechners und dem Port 80 zusammen. Wenn der Client beispielsweise ein Entwicklungscomputer ist und IIS installiert ist, ist Port 80 in einigen Szenarios exklusiv reserviert, was zu Konflikten mit Ihrer Prototypanwendung führen kann. Dies ist, was this blog post eine Lösung für darstellt und was die ClientBaseAddress-Eigenschaft entwickelt, um mit zu helfen. Unabhängig davon, mit welchem ​​Port Sie verbunden sind - der Standard oder ein benutzerdefinierter, müssen Sie sicherstellen, dass alle Firewalls und Router auf beiden Seiten korrekt konfiguriert sind, damit sowohl der ausgehende Kanal als auch der separate Callback-Kanal eingerichtet werden können.

Eine .NET-Anwendung kann auch eine Silverlight-Anwendung bezeichnen. Da eine Silverlight-Anwendung, die in einem Browser ausgeführt wird, keine neuen eingehenden HTTP-Verbindungen akzeptieren kann, funktioniert WSDualHttpBinding mit seinem separaten Rückkanal nicht. Daher wurde PollingDuplexHttpBinding zuerst in Silverlight 2 erstellt, was als cleverer 'Trick' betrachtet werden kann, um die Tatsache zu umgehen, dass HTTP unidirektional ist, indem der Anfragekanal lange Zeit geöffnet bleibt (Long Polling) und als Backchannel verwendet wird ruft zurück zum Client. Dies hat eine Reihe von Implikationen sowohl auf der Client- als auch auf der Serverseite, die besonders für die Skalierung relevant sind. Weitere Einzelheiten finden Sie unter this post from my blog.

Mit einer Idee von Ihrem speziellen "real-world-Szenario" und Ihren Use-Cases hoffentlich wird dies Ihnen helfen, die richtige Bindung für Duplex-Callbacks zu erarbeiten.

+0

Sehr informativ +1 –

2

Wenn es eine Anwendung hinter einer Firewall ist, theoretisch ja. Es hängt davon ab, was du mit "wirklicher Welt" meinst; Wenn Sie damit "hohe Leistung" meinen, ist NetTcpBinding vielleicht eine bessere Appraach.

Verwandte Themen