Итак, я посмотрел примеры примеров, которые люди создавали для Duplex Communications, а именно, когда они размещались в IIS и подключались через Silverlight. Есть множество примеров этого ( эта статья MSDN великолепна ), но все используют ту же самую парадигму:
Пользователь A подключается к серверу A, он помещает его в список в памяти для получения будущих обновлений.
Пользователь B подключается к серверу A, он уведомляет всех пользователей в списке, что кто-то «вошел в систему».
... но что происходит, когда
Пользователь C подключается к серверу C, список в памяти для сервера C не содержит пользователя A или B.
Проблема в том, что я пытаюсь реализовать это в кластерной (веб-ферме) среде. Это усложняет ситуацию, потому что я не могу проверить, какая машина завершит передачу вызова wcf, поэтому передача любого сообщения всем другим пользователям затруднена.
Лучший сценарий, который я могу придумать, - это на самом деле подключить клиентов к какой-либо службе маршрутизации, которая принимает входящий запрос и перенаправляет клиента на конкретную машину. Конечно, тогда я теряю преимущество веб-фермы, поскольку одна машина эффективно обрабатывает все входящие запросы.
Менее эффективное решение состоит в том, чтобы служба постоянно что-то опрашивала (файл на файловом сервере или таблица в БД) в поисках изменений. Когда изменения будут внесены, отправьте их клиентам. Это похоже на очень уродливого ребенка, хотя.
Что я пропустил?
ОБНОВЛЕНИЕ - Система маршрутизации невозможна для моих нужд. Моя хостинговая компания не позволяет мне напрямую подключаться к конкретной машине в ферме по IP. Я могу подключиться только к общему интерфейсу балансировщика нагрузки, поэтому не могу гарантировать, что мои пользователи попадут на один и тот же сервер.
Пока что мы дошли до опроса таблицы в БД в поисках изменений. Все еще кажется уродливым ребенком.