Этот пост несколько связан с моим предыдущим постом .
Короче говоря, я пытаюсь создать http-привязку обратного опроса, где хост опрашивает своих клиентов на предмет запросов.Я использую код из http://archive.msdn.microsoft.com/duplexhttp в качестве справки.Теперь в этой привязке хост на самом деле является клиентом, а клиенты на самом деле серверами.Это означает, что клиент, использующий эту HTTP-привязку обратного опроса, должен в конечном итоге получить скрытый Service Host, предоставляющий средство перекачки каналов.
Теперь обычный шаблон использования типа ServiceHost требует наличия фактической реализации службы WCF.,В моем случае ServiceHost открыт на клиенте - у него нет реализации сервиса и это справедливо.
Мне интересно, как лучше всего решить эту проблему?
В идеале этот хост-сервис не нуждается в обслуживании.Хост опроса отправляет экземпляры Message, которые не сопоставлены ни с каким контрактом на обслуживание.Эти сообщения запрашиваются и отвечают по выделенным каналам - HttpPollingRequestChannel и HttpPollingReplyChannel соответственно.Но мне нужен сервисный хост для канальной насосной установки, которую он реализует.
Редактировать 1
Я полагаю, что для уточнения картины необходима дополнительная справочная информация.Наша система состоит из клиентов, сервера и агентов.Клиенты общаются с сервером, последний передает свои запросы агентам, которые возвращают результаты обратно на сервер.Все каналы являются прямыми HTTP - простыми и понятными.
Однако существует потребность в возможности развертывания агентов за брандмауэром без возможности открывать входящие порты на нем.Это означает, что связь между сервером и агентом больше невозможна.На мой взгляд, у меня есть два варианта:
- Перепроектировать протокол Сервер -> Агент, чтобы он использовал опрос.
- Реализация низкоуровневого связывания, которое будет использовать внутренний опрос.
Какой выбор вы бы сделали?Хотя второй вариант сложнее реализовать, это одноразовое усилие.Но у этого есть многочисленные преимущества.Является ли это возможным?Я думаю, да, потому что опрос дуплексного http-связывания уже существует как для Silverlight, так и для .NET - см. Ссылку в начале к этому сообщению.
Edit 2
Хочу еще раз подчеркнуть, что Я не хочу дуплекс .При дуплексной связи обратный вызов выполняется в контексте запроса, то есть Агент отправляет запрос, а Сервер выполняет обратный вызов.У меня дело другое.Агент ничего не отправляет.Сервер решает неожиданно связаться с Агентом.Нет активного запроса от имени Агента.Итак, существующая дуплексная привязка не подходит для меня, но я пытаюсь научиться у нее, как реализовать опрос.
Общая картина такова:
- Агент постоянно опрашиваетСервер
- Если Сервер хочет отправить сообщение Агенту, это сообщение ожидает следующего запроса на опрос и переходит к Агенту поверх ответа на запрос запроса.
Запросы опроса не являются частью какого-либо интерфейса, они реализованы в инфраструктуре связывания низкого уровня.