2013-09-26 2 views
1

У меня есть служба дуплексного wcf, которая содержит (в памяти) список обратных ссылок на своих клиентов. Существует два метода: Подписка и Отмена подписки на службу wcf.Wcf Router - Duplex services-resubscription

Все это работает с одним сервером wcf и несколькими клиентами. Проблема началась, когда я представил два сервера wcf с балансировкой нагрузки, используя службу Wcf router.

Для eg- у меня есть два wcf-сервера (wcf1 и wcf2) и один сервер маршрутизатора (r1). Когда клиент вызывает «Подписаться» на конечную точку маршрутизатора, он передает этот запрос как серверам wcf1, так и wcf2. Так что обе они содержат ссылку обратного вызова клиенту. Проблема начинается, когда один из серверов wcf отключен. Если сервер wcf1 опускается, все подписки теряются. Поэтому, когда он возвращается, тогда нет подписчиков, доступных для выполнения обратных вызовов, и нет способа уведомлять клиентов о повторной подписке.

Я попытался прослушивать событие сбоя на стороне клиента. Это не срабатывает, потому что он подключается к конечной точке маршрутизатора. Это событие будет срабатывать только в том случае, если сервер маршрутизатора не работает.

Кто-нибудь сталкивался с подобной проблемой с моей? Я делаю что-то неправильно?

ответ

0

Единственный способ справиться с этим - сохранить список обратного вызова в каком-либо ресурсе, доступном для совместного использования, таком как база данных, кеш или даже файл на общем диске. Это может быть доступно для каждого экземпляра вашего сервиса при запуске, поэтому все обратные вызовы загружаются обратно в случае сбоя.

Извините, это, вероятно, не то, что вы хотите здесь.

+0

Я был в предположении, что ссылки обратного вызова не могут быть сериализованы и сохранены в каком-либо хранилище постоянного хранения. Я перепроверю, что – Sai

+0

Если это правда, я не могу думать о другом. Я не думаю, что MS правильно предусмотрела, как люди будут использовать дуплекс WCF - по-моему, дуплекс WCF не подходит для цели. –

+0

Я только что проверил, когда мы сериализуем и десериализируем обратные вызовы, это уже не действительный объект или содержит фактическую ссылку на клиента. Я согласен, wcf duplex создает больше проблем, чем решение. – Sai