Как WsDualHttpBinding узнает о канале обратного вызова? - PullRequest
2 голосов
/ 16 марта 2009

что-то кажется мне очень странным, я пытался заглянуть в WCF с помощью Reflector, но, простите, это слишком сложно понять: (.

Когда клиент A вызывает дуплексный сервис на сервере B с помощью wsDualHttpBinding, я думал, что клиент A включает базовый адрес клиента (адрес обратного вызова) в заголовок запроса, как этот

<a:ReplyTo>http://client.foo/29293-3287-2387-3291</a:ReplyTo>

.

Но OperationContext.Current.IncomingMessageHeaders.ReplyTo возвращает ноль ...

Как работает wsDualHttpBinding, чтобы узнать адрес клиентского канала ????

Есть какая-то черная магия или что-то?

Решение

Это надежный сеанс, который отвечает за передачу ответа на адрес. Мы можем проверить это с помощью этих обязательных элементов в customBinding

<reliableSession/>
<compositeDuplex/>
<oneWay></oneWay>
<textMessageEncoding></textMessageEncoding>
<httpTransport/>

Удалите надежный сеанс, и у вашего сервиса больше нет канала обратного вызова ...

Ответы [ 2 ]

2 голосов
/ 16 марта 2009

Я думаю, что эта информация передается через сообщения при установлении сеанса. Если вы используете такой инструмент, как «fiddler», чтобы наблюдать весь трафик http, я догадываюсь, что вы увидите его в первоначальном сообщении о настройке сеанса. Никакой магии, клиент должен сказать серверу «куда перезвонить».

0 голосов
/ 16 марта 2009

Когда я работаю с сокетами, адрес абонента также доступен - я предполагаю, что знание того, на какой адрес вам нужно ответить, является довольно низкоуровневой функцией сетевого взаимодействия ...

...