Обработка отброшенных клиентов в приложении WCF с дуплексной привязкой

Мы используем модель pub-sub в нашем приложении WCF, которая в значительной степени соответствует образцу Microsoft: Шаблоны проектирования: публикация-подписка на основе списков .

Хотя служба предоставляет понятие subscribe () и unsubscribe () , как лучше всего выполнить очистку в ситуации, когда клиент умирает или выходит из строя канал? ? В настоящее время, когда клиент подписывается, я присоединяюсь к обработчикам к текущим событиям InstanceContext Closed и Faailed текущего :

_communicationObject = OperationContext.Current.InstanceContext;
_communicationObject.Closed += OnClientLost;
_communicationObject.Faulted += OnClientLost;

Обработчик OnClientLost просто отменяет подписку клиента, однако:

  1. Достаточно ли одного вышеуказанного передового опыта, чтобы уловить все ситуации, когда клиент прерывает дуплексную связь? Или служба должна просто обрабатывать исключения, возникающие в момент, когда она пытается связаться с клиентом, а затем обрабатывать очистку?
  2. Помимо простой отмены подписки на обработчик обратного вызова клиента, должна ли проводиться дополнительная очистка, особенно в случае сбоя?

Этот вопрос ставит аналогичный вопрос, но в конечном итоге не дает ответов на те случаи, которые не связаны с вызовом клиента подписки и / или отказа от подписки.

Спасибо

14
задан Community 23 May 2017 в 11:46
поделиться