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
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.
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.
- 1. Wie funktioniert wsDualHttpBinding?
- 2. Möglicher Endpunkt mit wsdualhttpbinding + webhttpbinding?
- 3. Welchen Vorteil hat WSDualHttpBinding in WCF?
- 4. Wie WsDualHttpBinding über den Callback-Kanal informiert?
- 5. WCF wsDualHttpBinding aufhören, Callbacks zu senden
- 6. Wie richtet man einen WCF-Client mit wsDualHttpBinding im Code ein?
- 7. WCF-Client kann keine Verbindung zu WCF-Dienst herstellen, der in IIS über ServiceHost gehostet wird?
- 8. WCF über net.tcp mit Sicherheitsmodus keine gibt Ausnahme
- 9. WCF Duplex-Dienst mit Net-TCP: "Stream-Sicherheit ist erforderlich ..."
- 10. WP7 Callbacks von WCF
- 11. Scala für() vs für {}
- 12. Verbindungszeichenfolge für Informix für .NET
- 13. Mindestanforderungen für Unity für Android?
- 14. Gruppe für Monat für Anwesenheitsliste
- 15. Modul für OneSignal für Appcelerator
- 16. Vorschlag für Vorlagenbuch für C++?
- 17. Alternative für BtsMSITask für BizTalk
- 18. Elmah für WCF für Ausnahmebehandlung
- 19. Beispiel für den Domain-Namen für mailgun be für nodejs?
- 20. Einstellung für Ländereinstellung für Java-Überschreibung für bestimmtes Gebietsschema
- 21. Implementieren von Bedingungsvariablen für CRITICAL_SECTIONs für WinThreads für XP
- 22. Alternative für ‚in‘ Operator für verschachtelte Listen
- 23. Validierung für TextBox für ein Benutzerformular
- 24. Jeder Ersatz für Bugsense für ACRA
- 25. "für" Schleife in einem anderen "für" Schleife
- 26. Empfehlung für Bildschirm-Video-Capture für Demos
- 27. istream für die Kommandozeileneingabe für C++/Poco
- 28. Zeitbedingung für Überprüfer für GCM Zweck
- 29. Swift: Verschlüsselte Eingabe für UITextField für Kartendetails
- 30. Relativer Pfad für Asset-Funktion für Laravel
Sehr informativ +1 –