4.0 / WCF: лучший подход для двунаправленной шины сообщений? - PullRequest
3 голосов
/ 20 апреля 2010

Просто обновление технологии, теперь, когда вышел .NET 4.0.

Я пишу приложение, которое связывается с сервером через то, что в основном является шиной сообщений (вместо вызовов методов). Это основано на внутренней архитектуре приложения (которая является многопоточной, передавая сообщения).

Количество сообщений от клиента к серверу ограничено, от сервера к клиенту гораздо больше. Большинство из них могут обрабатываться с помощью отдельного специализированного механизма, но в конце мы говорим о 10-100 маленьких сообщениях в секунду, идущих от сервера к клиенту.

Клиент должен работать в «интернет-условиях». Это означает, что, возможно, домашние конечные пользователи за стандартными устройствами NAT (то есть типичными DSL-маршрутизаторами) - защищенная сеть, защищенная брандмауэром, и, следовательно, «открытая» сеть не может быть принята.

Я хочу, чтобы задержка была как можно меньше, а коммуникация была как можно меньше.

Каков технологически лучший способ обработки обратного вызова шины сообщений? У меня нет проблем регулярно звонить на сервер для доставки сообщений, если что-то нужно отправить ... ... но каковы мои варианты обработки сообщений от сервера к клиенту?

  • WsDualHttp работает как? Особенно по сценарию NAT?

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

Ответы [ 3 ]

1 голос
/ 10 мая 2010

Для двунаправленной связи лучше всего ставить NetTcpBinding, а не http-привязки, если они доступны.

Преимущество заключается в том, что клиент может инициировать соединение с сервером.

0 голосов
/ 11 мая 2010

Взгляните на Windows AppFabric, хорошее место для начала - Здесь . Он в основном объединяет WCF и WF в сервер приложений, при этом активация WCF поддерживается через WAS. Это где я бы разместить этот тип приложения. Он предлагал полнодуплексную ориентацию на соединение, p2p или сеансы между клиентом и сервером. Не путайте Windows appfabric с Azure appfabric (ранее называлось Azure Service Bus).

Что касается приведенных выше привязок, то и NetTcpBinding, и WsDualHttp предлагают обратные вызовы, но привязку ws вы получаете много за свои деньги, особенно если это смешанная среда программирования и вам нужно сгладить wsdl, чтобы заставить взаимодействие работать. Я также думаю, что WsDual легче обходить маршрутизаторы, хотя я понимаю, общаясь с друзьями, что Windows AppFabric смягчает это с помощью новых служб ретрансляции (которых я не видел, и я думаю, что теперь они были переименованы).

Надеюсь, это поможет.

0 голосов
/ 10 мая 2010

Я бы пошел с Windows Azure Service Bus. Смотрите мой ответ в следующем вопросе:

WCF, 4,0, двунаправленный

...