WCF - Ist es eine schlechte Übung, einen Kanal für eine lange Zeit offen zu lassen?

9

Ich lerne gerade die Fäden bei WCF. Was ich vorhatte, war ein offener Duplexkanal zwischen einem Client und einem Server, der NetTcpBinding verwendet, und das auf unbegrenzte Zeit offen zu halten, damit der Server Anforderungen an den Client einleiten kann.

Dann bin ich auf diesen

Stimmt das? Wenn ich NetTcpBinding verwende und einen Verweis auf einen offenen Kanal auf beiden Seiten der Beziehung behalte, was passiert dann, wenn ein Kommunikationsfehler auftritt? Wie erfasse ich das Fehlerereignis? Welche anderen Probleme gibt es? Gibt es einen Unterschied, welches .NET Framework du verwendest? (Ich bin auf 4.0.)

    
Shaul Behr 02.01.2011, 12:57
quelle

2 Antworten

14

Ich stimme Jesse nicht zu ( als Randnotiz: Er empfiehlt Ihnen auch, standardmäßig WCF-Serviceklassen als Singletons zu verwenden, was meines Erachtens die schlechteste Idee überhaupt ist. ) .

Solange Sie sich gut darum kümmern, Ausnahmen auf dem Server abzufangen (zB indem Sie die IErrorHandler -Schnittstelle in Ihrer Serviceklasse implementieren), ist es hier nicht sinnvoll, Ihren Kanal herunterzufahren ... besonders nicht in einem Firmen-LAN Umgebung mit NetTcpBinding.

Im Gegensatz zu z.B. Eine Datenbankverbindung, die häufig Lizenzkosten verursacht, sollte keine Probleme verursachen, wenn eine Netzwerkverbindung zu Ihrem Service-Computer offen bleibt. Es ist auch in der Regel keine begrenzte Ressource, so ständig öffnen und schließen scheint es sinnlos.

Wenn Sie Ihren Servicekanal über einen längeren Zeitraum geöffnet lassen, müssen Sie auf der Clientseite in der Lage sein, Fehler zu behandeln - z. Sie müssen in der Lage sein, aus einer Situation, in der der Kanal fehlerhaft geworden ist, wiederherzustellen, wenn überhaupt eine Ausnahme aufgetreten ist (z. B. das Netzwerk ist ausgefallen oder etwas ähnliches).

Aber wenn Sie das tun, sehe ich keinen Vorteil, wenn Sie Ihren Kanal nach jedem Anruf ständig schließen und für den nächsten wieder öffnen ...

    
marc_s 02.01.2011, 13:38
quelle
7

Ja, es ist ratsam, den Kanal zu schließen, sobald er nicht mehr benötigt wird. Aber es ist nicht üblich bei Duplex-Kommunikation. Wenn Sie die Duplex-Kommunikation verwenden, benötigen Sie einen geöffneten Kanal, damit der Server Nachrichten an den Client zurücksenden kann. WCF-Kommunikation wird immer vom Client initiiert. Der Rückruf ist nur zulässig, wenn der vom Client initiierte Kanal geöffnet bleibt.

Die Duplexkommunikation umfasst einige zusätzliche Aufgaben, um Verbindungsfehler zu behandeln. Ihr Dienst sollte einen Ping-Mechanismus enthalten, damit der Client die Verbindung in regelmäßigen Abständen überprüfen kann. Wenn die Verbindung fehlschlägt, erhält der Client eine Ausnahme, und Sie können die Verbindung erneut herstellen. Der Dienst sollte auch die Ausnahme behandeln, wenn die Rückrufnachricht an den fehlerhaften Kanal gesendet wird.

    
Ladislav Mrnka 02.01.2011 13:10
quelle

Tags und Links