WCF: „Das öffnete System.Servicemodel.Channels.ClientreliableUplexSessionChannel“
-
03-07-2019 - |
Frage
Ich habe derzeit einen WCF -Dienst mit einem Callback -Vertrag (Duplex), und wenn ich die Anwendung verwende, die sie auf meinem Computer verwendet, funktioniert alles einwandfrei. Wenn ich sie jedoch von einem anderen Computer probiere, verbindet er sich nicht.
Diese Probleme traten auf, sobald ich diese verwendet habe wsDualHttpBinding
(für Rückrufe), denn als ich benutzte wsHttpBinding
Alles hat gut funktioniert.
Warum akzeptiert der Webdienst keine Anfragen von anderen Computern? Ist es einige Hosting -Einstellungen, die geändert werden müssen?
In Bezug auf die Protokolle bekomme ich diese:
ALT Text http://img17.imageshack.us/img17/4628/wcfissue.jpg
Der offene Betrieb wurde innerhalb der zugewiesenen Zeitüberschreitung von 00:01:00 nicht abgeschlossen. Die Zeit, die dieser Operation zugewiesen wurde
Das öffnen system.servicemodel.channels.cliENTRELIABLEUPLEXSessionChannel
Fehlerhaftes System.Servicemodel.Channels.ClientreliableUplexSessionChannel
Fehlerhaftes System.servicemodel.Channels.servicechannel
Nicht geöffnetes System.servicemodel.channels.servicechannel
Der Port ist auf meinem Router (sowohl TCP als auch UDP) geöffnet, das ist also nicht das Problem.
In Bezug auf die Serviceattribute verwende ich dies:
Schnittstelle:
[ServiceContract(Name = "MusicRepo_DBAccess_Service",
CallbackContract = typeof(IOnlineUsersCallback),
SessionMode=SessionMode.Required)]
Service:
[ServiceBehavior(
ConcurrencyMode=ConcurrencyMode.Reentrant,
InstanceContextMode=InstanceContextMode.Single)]
Aktualisieren
In Bezug auf Orion Edwards' Post:
- Keine Firewall
- Siehe Punkt 1
- Ja, ich kann, weil ich den Hafen auf meinem Router weitergeleitet habe
- Ich benutze IIS, um den Server zu hosten.
Die Sache ist, dass dieses Problem begann, als ich wechselte wsHttpBinding
(was gut funktionierte) zu wsDualHttpBinding
(Weil ich Rückrufe brauchte)
Aktualisieren
Ich habe jetzt von Wechsel von wsDualHttpBinding
zu NetTcpBinding
Und aus irgendeinem Grund funktioniert alles gut.
Ich habe benutzt Dieser Artikel Um mir zu helfen, Hosting auf IIS einzurichten, und danken, dass alles wie erwartet funktioniert, mit Rückrufen.
Lösung
Ich habe jetzt von Wechsel von wsDualHttpBinding
zu NetTcpBinding
Und aus irgendeinem Grund funktioniert alles gut.
Ich habe benutzt Dieser Artikel Um mir zu helfen, Hosting auf IIS einzurichten, und danken, dass alles wie erwartet funktioniert, mit Rückrufen.
Andere Tipps
Es würde helfen, wenn Sie die Einstellungen für Server- und Clientkonfiguration veröffentlichen.
Hier ist eine Zusammenfassung, wie das WSDualHttpBinding funktioniert Msdn (betonen meine):
Das WSDualHTTPBinding bietet die gleiche Unterstützung für Web -Service -Protokolle wie das WSHTTPBINDING, jedoch für die Verwendung mit Duplex -Verträgen. WSDUALHTTPBINDING unterstützt nur die SOAP -Sicherheit und erfordert zuverlässige Nachrichten. Diese Bindung erfordert, dass der Kunde über eine öffentliche URI verfügt, die einen Rückruf -Endpunkt für den Service bietet. Dies wird durch das Attribut clientBaseaddress bereitgestellt. Eine doppelte Bindung setzt die IP -Adresse des Clients dem Dienst aus. Der Kunde sollte die Sicherheit nutzen, um sicherzustellen, dass er nur mit Diensten verbunden ist, die er vertraut.
Diese Bindung kann verwendet werden, um durch einen oder mehrere Seifenintermediäre zuverlässig zu kommunizieren.
Standardmäßig generiert diese Bindung einen Laufzeitstapel mit WS-Reliablemessaging für Zuverlässigkeit, WS-Security für Nachrichtensicherheit und Authentifizierung, HTTP für die Nachrichtenzustellung und eine Text-/XML-Nachrichtencodierung.
Dinge zu überprüfen:
- Windows-Firewall
- Die Firewall Ihres Antivirenprodukts
- Können Sie von einem Remote -Computer in den Port in den Port telnet?
- Läuft Ihr "Server" unter dem ASP.NET -Entwicklungsserver? Dies akzeptiert nur Anfragen von Localhosts - Sie müssen den Server verwenden
ServiceHost
Oder hosten Sie es unter IIS.