Я начинаю веб-службу мыла WCF. Попытка реализовать гибкий, функционально совместимый веб-сервис с возможностью горячей замены.
Устройство использует службу сервера (предопределенный IP-адрес), что означает регистрацию на сервере, а затем служба запрашивает у устройства всю информацию о конфигурации устройства. Служба удаленно управляет этими зарегистрированными устройствами позже.
Архитектура сети
См. диаграмму ниже. Служба на стороне сервера прослушивает порт 80. У нас был маршрутизатор (маршрутизатор B), который подключается к серверу и устанавливает таблицу NAT 220.120.20.209:80 на 192.168.0.3:80. 220.120.20.209 — общедоступный IP-адрес.
Два клиента подключаются к маршрутизатору (маршрутизатор A) и имеют частные IP-адреса относительно (170.15.40.1/170.15.40.2). Клиенты размещают службу (называемую DeviceService), прослушивающую порт 80. И мы не настроили NAT на маршрутизаторе A. 68.250.250.1 — это общедоступный IP-адрес.
Операция
- (Запросить регистрацию) Клиент отправляет (запрашивает) сообщение Сервису.
- (Ответ) Служба отвечает на сообщение.
- (Получить конфигурацию с устройств) Служба использует клиента посредством вызова, например http://clientsIP:80/DeviceService.
Операция 1, 2 у меня работает. Насколько я понимаю, входящий IP-адрес клиента №1 — 68.250.250.1 (я использую RemoteEndpointMessageProperty, чтобы получить адрес вызывающего абонента).
Мой вопрос: «Операция 3 не работает». Сервер не может получить доступ к частному IP-адресу клиента из-за маршрутизатора/брандмауэра. Сервер получил только 68.250.250.1. Как я могу решить эту проблему? проблема связана с сетевой архитектурой?
Целый день гуглил, не нашел ничего общего с моей проблемой. Но я нашел веб-сокет. Websocket поддерживает полнодуплексную связь через Tcp. Означает ли это, что после того, как клиент установил соединение с сервером, сервер может выполнить операцию 3 (получить конфигурацию с устройств) в любое время, даже в моей сетевой архитектуре?
Обновлено 24 апреля 2014 г.
Большое спасибо @vtortola. Изучив эти ссылки, я все еще не понимаю, можно ли разрешить вызов службы самообслуживания от клиента во время сеанса обратного вызова?
Попробуйте уточнить, что я думал
- Сначала у клиентов будет услуга самостоятельного размещения. например Предоставление услуг по настройке
- Позвольте Клиенту сначала управлять взаимодействием и создайте двунаправленный канал между Клиентом и Сервером.
- Запросы клиента и ответ сервера. В то же время Сервер запускает процедуру обратного вызова.
- Сервер запрашивает сообщение «Предоставление конфигурации» клиенту через канал в течение периода обратного вызова.