4 Stimmen

WCF: "Fehler beim Öffnen von System.ServiceModel.Channels.ClientReliableDuplexSessionChannel"

Ich habe derzeit einen WCF-Dienst mit einem CallBack-Vertrag (duplex), und wenn ich die Anwendung, die es auf meinem Computer verwendet alles funktioniert gut, aber wenn ich es von einem anderen Computer versuchen, es verbindet nicht.

Diese Probleme traten auf, als ich auf die Verwendung dieser wsDualHttpBinding (für Rückrufe), weil ich bei der Verwendung von wsHttpBinding hat alles gut funktioniert.

Warum nimmt der Webdienst keine Anfragen von anderen Computern an? Müssen einige Hosting-Einstellungen geändert werden?


Was die Protokolle betrifft, so erhalte ich diese:

Alt-Text http://img17.imageshack.us/img17/4628/wcfissue.jpg

Der Öffnungsvorgang wurde nicht abgeschlossen innerhalb der zugewiesenen Zeitspanne von 00:01:00. Die für diesen Vorgang vorgesehene Zeit Operation zugewiesene Zeit war möglicherweise ein Teil einer längeren Zeitüberschreitung

System.ServiceModel.Channels.ClientReliableDuplexSessionChannel konnte nicht geöffnet werden

Fehlerhaft System.ServiceModel.Channels.ClientReliableDuplexSessionChannel

Fehlerhaft System.ServiceModel.Channels.ServiceChannel

Öffnen fehlgeschlagen System.ServiceModel.Channels.ServiceChannel


Der Port ist auf meinem Router offen (sowohl TCP als auch UDP), also ist das nicht das Problem.

Was die Service-Attribute angeht, so verwende ich Folgendes:

Schnittstelle:

[ServiceContract(Name = "MusicRepo_DBAccess_Service", 
                 CallbackContract = typeof(IOnlineUsersCallback),
                 SessionMode=SessionMode.Required)]

Dienst:

[ServiceBehavior(
        ConcurrencyMode=ConcurrencyMode.Reentrant, 
        InstanceContextMode=InstanceContextMode.Single)]

[Update]

Hinsichtlich Orion Edwards ' post:

  • Keine Firewall
  • Siehe Punkt 1
  • Ja, ich kann, weil ich den Port auf meinem Router weitergeleitet habe.
  • Ich verwende IIS, um den Server zu hosten.

Die Sache ist die, dass dieses Problem auftrat, als ich von wsHttpBinding (die einwandfrei funktionierte) zu wsDualHttpBinding (weil ich Rückrufe brauchte)


[Update]

Ich bin jetzt umgestiegen von wsDualHttpBinding a NetTcpBinding und aus irgendeinem Grund funktioniert alles einwandfrei.

Ich habe verwendet dieser Artikel zu helfen, mich einrichten Hosting auf IIS, und thankully alles funktioniert wie erwartet, mit Rückrufe.

2voto

Andreas Grech Punkte 102197

Ich bin jetzt umgestiegen von wsDualHttpBinding a NetTcpBinding und aus irgendeinem Grund funktioniert alles einwandfrei.

Ich habe verwendet dieser Artikel zu helfen, mich einrichten Hosting auf IIS, und thankully alles funktioniert wie erwartet, mit Rückrufe.

1voto

Jonathan Parker Punkte 6551

Es wäre hilfreich, wenn Sie die Server- und Client-Konfigurationseinstellungen angeben würden.

Hier ist eine Zusammenfassung, wie die wsDualHttpBinding funktioniert von MSDN (Hervorhebung von mir):

Das WSDualHttpBinding bietet die dieselbe Unterstützung für Webdienstprotokolle wie das WSHttpBinding, jedoch zur Verwendung mit Duplex-Verträgen. WSDualHttpBinding unterstützt nur SOAP-Sicherheit und erfordert zuverlässiges Messaging. Diese Bindung erfordert, dass der Client über eine öffentlichen URI hat, der einen Callback Endpunkt für den Dienst bereitstellt. Dieser wird wird durch das clientBaseAddress Attribut bereitgestellt. Eine doppelte Bindung legt die IP-Adresse des Clients für den Dienst. Der Client sollte mit Sicherheit verwenden, um sicherzustellen, dass er nur mit Diensten verbindet, denen er vertraut.

Diese Bindung kann verwendet werden, um zuverlässig über eine oder mehrere mehrere SOAP-Vermittler zu kommunizieren.

Standardmäßig erzeugt diese Bindung eine Laufzeit-Stack mit WS-ReliableMessaging für die Zuverlässigkeit, WS-Security für die Nachrichtensicherheit und Authentifizierung, HTTP für die Nachrichten Zustellung und einer Text/XML-Nachricht Kodierung.

0voto

Orion Edwards Punkte 117361

Zu überprüfende Dinge:

  • Windows-Firewall
  • Die Firewall Ihres Antivirenprodukts
  • Können Sie sich von einem entfernten Rechner aus per Telnet in den Anschluss einwählen?
  • Läuft Ihr "Server" unter dem ASP.NET-Entwicklungsserver? Dieser akzeptiert nur Anfragen von lokalen Hosts - Sie müssen den Server selbst hosten, indem Sie ServiceHost oder unter IIS hosten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X