WSDualHttpBinding для дуплексных обратных вызовов

StackOverflow https://stackoverflow.com/questions/59677

  •  09-06-2019
  •  | 
  •  

Вопрос

Будет ли использование WSDualHttpBinding для дуплексных обратных вызовов работать в реальных сценариях?Скажем, у меня есть приложение .NET, которое использует случайный порт, сможет ли служба разрешить базовые адреса и порт клиента для обратных вызовов?

Это было полезно?

Решение

Полный ответ на ваш вопрос зависит от того, является ли "сценарий реального мира" сценарием Интрасети или Интернета.Хотя WSDualHttpBinding работает в обоих сценариях, необходимо учитывать некоторые особенности:

Интранет

Привязка WSDualHttpBinding будет работать с вашим приложением.СЕТЕВОЕ приложение использует предварительно настроенный пользовательский порт в сценарии интрасети, и "Да" служба сможет разрешить базовые адреса и порт клиента для обратных вызовов:как именно, объясняется ниже.Причина, по которой это объясняется ниже, заключается в том, что WSDualHttpBinding в первую очередь предназначен для использования через Интернет.

Дуплексные обратные вызовы в сценарии интрасети, когда вы можете использовать WCF как на клиенте, так и на сервере, лучше всего достигаются с помощью NetTcpBinding или NetNamedPipeBinding .Эти привязки используют TCP и ICP соответственно в качестве транспорта (а не HTTP) и пользовательскую двоичную кодировку, поэтому WCF требуется с обеих сторон.Для обратных вызовов клиенту повторно используется тот же канал, который использовался для подключения к Услуге через Привязку, без необходимости открытия нового порта.

Интернет

В интернет-сценарии допустимые HTTP-запросы и ответы передаются только в одном направлении, HTTP разработан как односторонний протокол.Таким образом, при использовании WSDualHttpBinding WCF создает отдельный HTTP-канал для обратных вызовов.В ответ на ваш второй вопрос:адрес назначения для этого обратного вызова клиенту по умолчанию состоит из имени хоста клиентского компьютера и порта 80.Например, если клиент является машиной разработки и у него установлен IIS, порт 80 будет зарезервирован исключительно в некоторых сценариях, что вызовет конфликты с вашим прототипом приложения.Это то , что это сообщение в блоге представлено решение и то, в чем призвано помочь свойство ClientBaseAddress.Независимо от того, какой порт вы используете - стандартный или пользовательский, вы должны убедиться, что все брандмауэры и маршрутизаторы с обеих сторон настроены правильно, чтобы разрешить установку как исходящего канала, так и отдельного канала обратного вызова.

Приложение .NET также может обозначать приложение Silverlight.Из-за того, что приложение Silverlight, запущенное в браузере, не может принимать новые входящие HTTP-соединения, привязка WSDualHttpBinding к отдельному обратному каналу не будет работать.Следовательно, PollingDuplexHttpBinding был создан впервые в Silverlight 2, что можно рассматривать как хитроумный "трюк", позволяющий обойти тот факт, что HTTP является однонаправленным, сохраняя канал запроса открытым в течение длительного времени (длительный опрос) и используя его в качестве обратного канала для обратных вызовов клиенту.Это имеет ряд последствий как на стороне клиента, так и на стороне сервера, особенно связанных с масштабированием, для получения более подробной информации, пожалуйста, смотрите этот пост из моего блога.

Имея представление о вашем конкретном "реальном сценарии" и ваших вариантах использования, надеюсь, это поможет вам выработать правильную привязку для использования при дуплексных обратных вызовах.

Другие советы

Если это приложение за брандмауэром, теоретически да.Это зависит от того, что вы подразумеваете под "реальным миром".;если под этим вы подразумеваете "высокую производительность", возможно, NetTcpBinding является лучшей оценкой.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top