Мы используем модель pub-sub в нашем приложении WCF, которое в значительной степени следует за образцом Microsoft: Шаблоны проектирования: Публикация-Подписка на основе списков.
В то время как служба предоставляет понятие subscribe() и unsubscribe(), какова наилучшая практика для обработки очистки в ситуации, когда клиент умирает или неисправности канала? В настоящее время, когда клиент подписывается, я присоединяюсь к обработчикам к текущим событиям InstanceContext Closed и Faulted (пользователи службы используют режим контекста экземпляра PerSession и netTcpBinding):
_communicationObject = OperationContext.Current.InstanceContext;
_communicationObject.Closed += OnClientLost;
_communicationObject.Faulted += OnClientLost;
Обработчик OnClientLost просто отписывает клиента:
- Является ли вышеприведенная практика и достаточно сильной, чтобы поймать все ситуации, когда клиент отключает двустороннюю связь? Или служба должна просто обрабатывать исключения, встречающиеся в точке, где она пытается связаться с клиентом и обрабатывать очистку тогда?
- Помимо просто отмены подписки на обработчик обратного вызова клиента, следует ли выполнить любую дополнительную очистку, особенно в случае неисправности?
Этот вопрос ставит аналогичный вопрос, но в конечном итоге не дает ответов на случаи, находящиеся за пределами клиента, вызывая подписку и/или отмену подписки
Спасибо