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

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


person GP.    schedule 12.09.2008    source источник


Ответы (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 является однонаправленным, сохраняя канал запроса открытым в течение длительного времени (длительный опрос) и используя его в качестве обратного канала для перезванивает клиенту. Это имеет ряд последствий как на стороне клиента, так и на стороне сервера, особенно касающихся масштабирования, для получения более подробной информации см. этот пост из моего блога.

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

person Peter McG    schedule 08.08.2009

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

person t3rse    schedule 12.09.2008