Wir verwenden in unserer WCF-Anwendung ein Pub-Sub-Modell, das dem Microsoft-Beispiel sehr ähnlich ist: Design Patterns: List-Based Publish-Subscribe.Handhabung von gelöschten Clients in einer WCF-Anwendung mit Duplexbindung
Während der Dienst eine Vorstellung von subscribe()
und unsubscribe()
bietet, was ist die beste Vorgehensweise, um die Bereinigung in der Situation zu behandeln, wenn ein Client stirbt oder die Kanalfehler? Derzeit, wenn ein Client abonniert hänge ich an Handler auf den aktuellen InstanceContext
‚s Closed
und Faulted
Ereignisse (die Service-Benutzer ein PerSession Instanz Kontextmodus und netTcpBinding):
_communicationObject = OperationContext.Current.InstanceContext;
_communicationObject.Closed += OnClientLost;
_communicationObject.Faulted += OnClientLost;
Der OnClientLost
Handler einfach Abo kündigt den Client, aber:
- Ist das obige eine gute Übung und alleine robust genug, um alle Situationen zu erfassen, in denen ein Client die Duplex-Kommunikation abbricht? Oder sollte der Dienst nur Ausnahmen behandeln, die an dem Punkt auftreten, an dem er versucht, mit dem Client zu kommunizieren und dann mit der Bereinigung zu beginnen?
- Abgesehen von der Abmeldung des Client-Call-Back-Handlers, sollte eine weitere Bereinigung speziell im Fehlerfall durchgeführt werden?
This question stellt eine ähnliche Frage, aber letztlich keine Antworten außerhalb des Kunden auf die Fälle vorsieht Aufruf abonnieren und/oder abmelden
Dank