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

10
задан GP. 12 September 2008 в 18:18
поделиться

2 ответа

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

Интранет

WSDualHttpBinding будет работать с вашим .NET-приложением, используя предварительно настроенный настраиваемый порт в сценарии интрасети, и «Да» служба сможет разрешить базовые адреса клиента и порт для обратных вызовов: как именно описано ниже. Причина, по которой это объясняется ниже, заключается в том, что 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 является однонаправленным, путем длительного сохранения открытого канала запроса (длительный опрос) и использования его в качестве обратного канала для обратных вызовов клиенту. Это имеет ряд последствий как на стороне клиента, так и на стороне сервера, особенно актуальных для масштабирования, для более подробной информации см. этот пост из моего блога .

С идеей вашего конкретного «сценария из реального мира» и ваши варианты использования, надеюсь, помогут вам выработать правильную привязку для использования для дуплексных обратных вызовов.

35
ответ дан 3 December 2019 в 14:07
поделиться

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

2
ответ дан 3 December 2019 в 14:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: