Как установить двустороннюю связь между веб-сервером и сервером сайта? - PullRequest
1 голос
/ 16 декабря 2010

Я планирую систему SaaS, которая будет написана на C #, ASP.NET с использованием WCF, который имеет два отдельных компонента:

  1. На статическом IP-сервере в облаке будет веб-приложение, общий для всех клиентов.
  2. В офисе каждого клиента будет установлено другое приложение, установленное на сервере с IIS.

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

Итак, как это сделать?это?

Я мог бы заставить приложения сайта "проверять" каждую минуту или около того, чтобы веб-приложение могло ответить "пока вы здесь, пожалуйста, сделайте x, у, г ..."но это выглядит очень не элегантно.Кроме того, если мы говорим о сотнях клиентов, я не хочу бомбардировать мой веб-сервер всем этим "привет!"сообщения, если они на самом деле не нужны.

Есть ли лучший способ?

Ответы [ 6 ]

3 голосов
/ 16 декабря 2010

WCF? Вот и мы:

  • Использовать подход, основанный на сообщениях (обмен сообщениями, вызовы методов без учета состояния).
  • Клиенты подключаются к серверу. Установите двухстороннее соединение на основе HTTP. Таким образом, сервер может перезвонить подключенным клиентам. Это стандартный материал WCF, который хорошо работает через NAT с версией .NET Framework версии 4.

Вуаля. В случае отключения клиент может повторно подключиться, повторно идентифицировать себя и получить ожидающие сообщения.

1 голос
/ 16 декабря 2010

IIRC «push-связь» выполняется, позволяя клиенту выполнить HTTP-запрос с неопределенным тайм-аутом.Затем сервер отвечает, когда ему есть что сказать.После ответа клиент немедленно отправляет новый запрос.

Он работает так же, как сервер устанавливает соединение и требует гораздо меньше ресурсов, чем опрос.

1 голос
/ 16 декабря 2010
  1. Динамический DNS является одной из возможностей, но зависит от ваших клиентов / клиентов.
  2. Если приложение сайта создано вами, оно может обращаться к веб-серверу только после изменения его адреса (или после перезапуска сервера сайта / веб-приложения). Тем не менее, поддерживающий ритм сердца, скажем, каждые 30 минут. до 1 часа неплохая идея.

Редактировать: Я думаю, что службы SNMP могут дать ответ, но я не эксперт по сетевым технологиям. Вам нужно будет немного покопаться или задать отдельный вопрос по stackoverflow.

0 голосов
/ 27 декабря 2010

В конце концов я решил использовать NetTcpBinding по причинам, лучше всего описанным @Allon Guralnek здесь .Стоит кликнуть и прочитать то, что он хочет сказать ...

0 голосов
/ 16 декабря 2010

Похоже, вам определенно понадобится какой-то реестр на сервере, тогда он может попытаться вызвать клиентские приложения, если ему потребуется работа.

Обычно это клиентские приложения, которые регистрируются на сервере каждые X секунд - так работает Selenium grid . С центральным узлом, на котором регистрируются клиенты. Когда концентратор получает запрос на запуск некоторых тестов, он передает задания клиентам для выполнения.

Вам может не потребоваться «регистрация». Сервер может просто попытаться вызвать зарегистрированное клиентское приложение, пока не найдет доступное. Таким образом, только серверу понадобится статический адрес (можно использовать DNS-имя вместо IP-адреса, чтобы сделать его более устойчивым). *

Также взгляните на XMPP PubSub . Это может быть более надежный и стандартизированный способ справиться с этим.

0 голосов
/ 16 декабря 2010

Что бы вы сказали о технологии Comet?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...