wcf и дуплексная связь

У меня много клиентских программ и одна услуга. Эти клиентские программы взаимодействуют с сервером через http-канал с WCF.

У клиентов динамический IP. Они онлайн 24 часа в сутки.

Мне нужно следующее: сервер должен уведомить всех клиентов с интервалом в 3 минуты. Если клиент новый (запущен в данный момент), он должен немедленно его уведомить.

Но поскольку клиенты имеют динамический IP-адрес и работают круглосуточно, а иногда соединение нестабильно, стоит ли использовать дуплексный режим wcf?

Что происходит, когда соединение прерывается? Он восстановится автоматически?

Можно ли использовать удаленный MSMQ для этого типа уведомлений?

С уважением,


person darpet    schedule 26.04.2010    source источник


Ответы (2)


Когда соединение разрывается, обратный вызов вызовет исключение, и канал закроется.

Я не уверен, что MSMQ будет работать для вас, если каждый клиент не создаст для вас очередь MSMQ, и вы не будете отправлять сообщения каждому из них. Опять же при ненадежном соединении не поможет. Я не думаю, что вы можете «протолкнуть» данные, если вы потеряете соединение с клиентом, клиент отключится или изменит IP-адрес без уведомления вашей системы.

person Vitalik    schedule 27.04.2010

Дуплекс WCF очень требователен к ресурсам, и, согласно практическому правилу, вы не должны использовать более 10. Дуплексные каналы связаны с большими накладными расходами. Также нет автовосстановления.

Если вы знаете интервал в 3 минуты и хотите, чтобы клиент получал информацию при запуске, почему бы не позволить клиенту запрашивать информацию с сервера?

person flayn    schedule 26.04.2010
comment
В этот момент клиенты объединяют информацию с сервера. Но я искал, наверное, лучшее решение. Иногда информация на сервере не готова, когда клиент запрашивает, поэтому клиенту необходимо выполнить несколько запросов, и из-за большого количества клиентов на сервере может возникнуть ненужная перегрузка. Это причина того, что я ищу push-технологии. Когда сервер готов, он отправляет информацию всем клиентам. Я обнаружил, что MSMQ может отправлять информацию удаленным клиентам. Я не уверен в автоматическом восстановлении и безопасности и, конечно же, в перегрузке и возможных проблемах. - person darpet; 27.04.2010
comment
Чтобы передать данные клиенту с помощью обратных вызовов, он должен зарегистрироваться на сервере хотя бы один раз, потому что вы не знаете IP-адреса клиентов. Вы также можете сохранить каждый IP-адрес клиента в списке на сервере при изменении IP-адреса клиента или запуске клиента. Затем вы можете использовать этот список для связи с клиентами без использования обратных вызовов. Но для этого потребуется прямое соединение от сервера к клиенту или переадресация портов, если клиент находится за брандмауэром. - person flayn; 27.04.2010