Двусторонняя связь с использованием WCF

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

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

Ответ 1

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

A) Двусторонняя служба с двойной привязкой Http

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