Прежде всего: у нас есть рабочее решение для проблемы, которую я собираюсь описать, но это просто не так.Лучшая практика WCF для клиента/сервера с уведомлениями
У нас есть приложение с одним сервером приложений и около 30 - 100 клиентов. Масштабирование сервера не является проблемой. Наиболее важными являются уведомления с сервера клиентам, но, конечно же, есть и сервисные методы, которые вызывают от клиента к серверу.
Что мы делаем сейчас, так это то, что мы создали контракт на обслуживание с каналом обратного вызова, зарегистрируем клиент в сервисе (то есть служба содержит список активных каналов обратного вызова) и отправим уведомления через эти каналы обратного вызова.
Проблема нам нужно перемещаться были:
- Таймаутов из соединения - услуга теперь содержит некоторый метод KeepAlive, который свистел клиенты о каждой минуте
- Re-подключениях клиента после сбоя сервера или сети - что является основным моментом, о котором я беспокоюсь. На данный момент у нас есть длительный клиентский объект (служебная ссылка, унаследованная от
DuplexClientBase
), чтобы вызвать службу и объект обратного вызова для обработки полученных уведомлений. На страницеclient.Faulted
мы пытаемся заменить клиента и объект обратного вызова новым клиентом, пока сервер не будет доступен снова. Этот подход включает в себя некоторые странной обработку исключений ...
Вопрос: Было бы лучше, чтобы запустить службу WCF на каждом клиент и зарегистрировать конечную точку каждого клиента на сервере? Есть ли лучшее решение для двух описанных проблем?
Редактировать: Дело в том, что я что-то упустил? - Я считаю, что описанная архитектура должна быть довольно распространенной, и я ищу «по умолчанию», лучший способ сделать это. Разве нет какой-то выборки для такого рода настроек?