WCF использует веб-службу и сетевую архитектуру

Я начинаю веб-службу мыла 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-адрес.

Операция

  1. (Запросить регистрацию) Клиент отправляет (запрашивает) сообщение Сервису.
  2. (Ответ) Служба отвечает на сообщение.
  3. (Получить конфигурацию с устройств) Служба использует клиента посредством вызова, например 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. Изучив эти ссылки, я все еще не понимаю, можно ли разрешить вызов службы самообслуживания от клиента во время сеанса обратного вызова?

Попробуйте уточнить, что я думал

  1. Сначала у клиентов будет услуга самостоятельного размещения. например Предоставление услуг по настройке
  2. Позвольте Клиенту сначала управлять взаимодействием и создайте двунаправленный канал между Клиентом и Сервером.
  3. Запросы клиента и ответ сервера. В то же время Сервер запускает процедуру обратного вызова.
  4. Сервер запрашивает сообщение «Предоставление конфигурации» клиенту через канал в течение периода обратного вызова.

person Hsu Wei Cheng    schedule 23.04.2014    source источник


Ответы (1)


Это не сработает, если маршрутизатор A использует NAT. RouterA имеет только порт TCP 80. Даже если вы перенаправите его Клиенту № 1, то Клиент № 2 не будет работать. И я предполагаю, что RouterA выполняет NAT, потому что IP-адреса клиентов являются частными, поэтому он переводит их в общедоступный IP-адрес.

Мне кажется, вы путаете два понятия. NAT (преобразование сетевых адресов) — это IP-адреса, а не порты. С помощью NAT вы позволяете частным IP-адресам ваших клиентов преобразовываться в общедоступные IP-адреса и, следовательно, выходить в Интернет. Переадресация портов — это метод, который позволяет сопоставить порт TCP или UDP в общедоступном интерфейсе маршрутизатора с определенным локальным IP-адресом. Маршрутизатор B выполняет NAT, чтобы позволить Серверу взаимодействовать с Интернетом через общедоступный интерфейс, и переадресацию портов, чтобы хосты в Интернете могли получить доступ к порту TCP 80 Сервера, получив доступ к его порту TCP 80.

Позвольте Клиенту управлять взаимодействием. В операции №3 клиент должен отправить конфигурацию устройства после получения ответа сервера в №2.

Если вам нужно, чтобы сервер возглавил некоторые взаимодействия, вы должны использовать дуплексный сервис WCF. WebSocket — это одна из дуплексных привязок WCF. Но опять же, сначала должен быть установлен канал от клиента к серверу.

person vtortola    schedule 23.04.2014