Estamos utilizando un modelo pub-sub en nuestra aplicación WCF que prácticamente sigue la muestra de Microsoft: Design Patterns: List-Based Publish-Subscribe.Gestión de clientes descartados en una aplicación WCF de vinculación dúplex
Si bien el servicio proporciona una noción de subscribe()
y unsubscribe()
, ¿cuál es la mejor práctica para manejar la limpieza en el caso de que un cliente fallezca o falle el canal? Actualmente, cuando un cliente se suscribe adjunto a los manipuladores de la corriente InstanceContext
's Closed
y Faulted
eventos (los usuarios de los servicios de un modo de contexto instancia PerSession y NetTcpBinding):
_communicationObject = OperationContext.Current.InstanceContext;
_communicationObject.Closed += OnClientLost;
_communicationObject.Faulted += OnClientLost;
El manejador OnClientLost
simplemente cancela la suscripción del cliente, sin embargo:
- ¿Es lo anterior una buena práctica y solo lo suficientemente robusto como para detectar todas las situaciones cuando un cliente abandona la comunicación dúplex? ¿O debería el servicio solo manejar las excepciones encontradas en el punto en que intenta comunicarse con el cliente y manejar la limpieza?
- Además de anular la suscripción del controlador de devolución de llamada del cliente, ¿se debería realizar una limpieza adicional, especialmente en el caso de un error?
This question plantea una pregunta similar, pero en última instancia no proporciona respuestas a los casos fuera del cliente que llama suscribirse y/o darse de baja
Gracias