Я работаю над приложением, использующим WCF для связи между сервером и клиентами. Сервер меняет количество услуг, а также одну главную услугу, которую клиенты могут запрашивать для информации о других сервисах, а затем подписаться на тех, кто хочет использовать информацию из главной службы.Практическое руководство: доступная двусторонняя связь Wcf
Главное обслуживание отправляет уведомления подписчикам, когда под-сервисы меняются (добавляются, удаляются и т. Д.). Также подкатегории отправляют уведомления каждые несколько секунд.
Это звучит как отличная возможность использовать каналы обратного вызова WCF, однако для них требуется использовать сеанс. Кроме того, при отправке уведомлений клиентам, когда кто-либо из клиенев был отстранен от позора, служба висит, пытаясь уведомить об этом. Даже если это истечет, через какое-то время, в течение этого времени ни один другой клиент не получит уведомление, и это неприемлемо, так как клиенты - это графические интерфейсы для монополизации приложений за вспомогательными услугами. Также использование MSMQ для этого не является вариантом, поскольку служба должна знать сразу же, когда операция отправки не удалась.
Решение, с которым я столкнулся, использует http-привязку (чтобы сразу знать, когда передача не удалась) и создания на клиенте явных служб обратного вызова, но для этого требуется, чтобы я написал много уродливого вида инфраструктурного кода.
Итак, мой вопрос: есть ли лучший способ сделать это с WCF. Оптимальным вариантом был Callback Contracts, потому что это освобождает меня от необходимости управлять услугой обратного вызова вручную, если только он не мог дождаться ответа от одного клиента, прежде чем пытаться отправить на следующий.