2015-05-26 5 views
10

Wenn ich eine sitzungslose Bindung habe, gibt es irgendwelche Umstände, unter denen der -Client-Kanal einen Fehler verursacht?Gibt es eine Möglichkeit, einen WCF-Kanal ohne Sitzung zu stören?

In meinem speziellen Fall, dass ich die folgende benutzerdefinierte Bindung haben:

<customBinding> 
    <binding name="MyCustomBinding"> 
    <mtomMessageEncoding/> 
    <httpTransport/> 
    </binding> 
</customBinding> 

Auf der Clientseite verwende ich die Standard-Proxies generiert, die von ClientBase<T> abzuleiten.

Ich habe erwartet, dass, wenn der Dienst eine unbehandelte Ausnahme, die kein FaultException war, dass der Kanal Fehler verursacht und den Client-Proxy-Fehler auch verursachen würde. Dies ist jedoch nicht der Fall - der Proxy blieb weiterhin im offenen Zustand und war danach nutzbar. Ich habe auch versucht, eines der Timeouts der Binding zu verletzen - das hat auch den Kanal nicht gestört und der Client-Proxy blieb im offenen Zustand.

Gibt es eine Situation, die dazu führt, dass der Client-Proxy fehlerhaft wird?

Related:

Antwort

-1

A ClientChannel Übergänge zu der fehlerbehafteten EIN-Zustand, wenn ein nicht behebbarer Fehler auftritt, ein. In diesem Zustand ist es nicht mehr nutzbar. Die Wiederherstellungsstrategie besteht darin, ein neues Objekt zu erstellen. Hauptgründe sind

  • Wenn die öffnen Methode aus irgendeinem Grund ausfällt, wird das Objekt geht in den Fehlerzustand.
  • Wenn ein sitzungsbasierter Kanal einen Fehler feststellt, von dem er nicht wiederhergestellt werden kann, wechselt er in den fehlerhaften Status. Dies kann zum Beispiel passieren, wenn ein Protokollfehler vorliegt (dh er empfängt eine Protokollnachricht zu einem ungültigen Zeitpunkt) oder wenn der Remote-Endpunkt die Sitzung abbricht.

Entnommen CommunicationState

sitzungsbasierte referes auf einen Transport Session. Jede unbehandelte Ausnahme wird den Kanal stören, um zu verhindern, dass der Proxy nach der Ausnahme erneut verwendet wird. Wenn keine Sitzung auf Transportebene vorhanden ist, kann der Client den Proxy nach einer Ausnahme weiterhin verwenden, außer dies sollte er nicht tun. Weitere Informationen über die state changes.

+0

Wissen Sie, wie Sie mit einem sessionlosen Kanal einen "nicht behebbaren Fehler" verursachen können? Können Sie ein Beispiel geben, bei dem die Open-Methode fehlschlägt und der Client-Kanal in den fehlerhaften Zustand übergeht? Auch warum sagst du: "Wenn es keine Sitzung auf Transportebene gibt, kann der Client den Proxy nach einer Ausnahme weiter verwenden, außer es sollte dies nicht sein". Warum nicht? –

Verwandte Themen