2013-04-11 4 views
10

Я разрабатываю архитектуру клиент-сервер, которая реализована с использованием Windows Communication Foundation. В одном из вариантов использования серверу требуется запрос статус клиента (-ов), что означает, что ему необходимо позвонить по методу SendStatus() на клиенте и запросить его статус. Мне просто интересно, можно ли реализовать этот вариант использования с помощью WCF без создания автономной службы на стороне клиента. Я пытаюсь избежать сокетов, потому что клиент является фоновым сервисом и по существу всегда подключен к серверу. Я понимаю, что WCF в конечном итоге использует сокеты для связи, но я специально пытаюсь использовать WCF, поскольку это больше похоже на доказательство концепции.Двусторонняя связь с использованием WCF

Обходной путь, который я думал о том, что клиент мог вызвать метод SendClientStatus() на сервере и отправить его статус каждые 5 секунд или около того. Но опять же это не похоже на хороший подход. Любая помощь будет оценена по достоинству.

+4

Это называется дуплексное общение. [Статья MSDN] (http://msdn.microsoft.com/en-us/library/ms731064.aspx) – J0HN

ответ

9

В мире WCF у вас есть более-менее два варианта.

A) A Duplex service with Dual Http Binding

Б) нет-возвращаемого значения схемы опроса - это, по существу, что вы описали. Наивная реализация, как вы правильно заметили, не такая уж большая, но есть оптимизация. Поскольку вам не нужно что-либо возвращенное из SendClientStatus (правильно?), Вы можете оптимизировать обмен сообщениями, только отправив обновление, когда есть один - например. пока статус клиента остается неизменным, на сервер ничего не отправляется. В зависимости от частоты, с которой изменяется статус клиента, это может значительно снизить трафик. Дуплексные услуги предоставляют некоторую дополнительную конфигурацию, которую вы хотите избежать, если вы в ней не нуждаетесь.

Смежные вопросы