2

私には何かが非常に奇妙に思えます。Reflector を使用して WCF の内部を調べようとしましたが、理解するのが難しすぎることを許してください :(.

クライアント A が wsDualHttpBinding でサーバー B の双方向サービスを呼び出すとき、クライアント A はこのようにリクエストのヘッダーにクライアント ベース アドレス (コールバックのアドレス) を含めると考えていました。

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

.

しかし、 OperationContext.Current.IncomingMessageHeaders.ReplyTo nullを返します...

クライアントチャネルのアドレスを知るためにwsDualHttpBindingはどのようにしていますか????

黒魔術か何かですか?

解決

これは、replyTo アドレスの転送を担当する信​​頼できるセッションです。customBinding のこれらのバインディング要素でこれを確認できます

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

trustedSession を削除すると、サービスにはコールバック チャネルがなくなります...

4

2 に答える 2

2

この情報は、セッションを確立するときにメッセージを介して渡されると思います。「フィドラー」などのツールを使用してすべての http トラフィックを監視すると、最初のセッション セットアップ メッセージに表示されると思います。クライアントはサーバーに「コールバックする場所」を伝える必要があります。

于 2009-03-15T21:53:48.160 に答える
0

私がソケットを扱うとき、呼び出し元のアドレスも利用可能です - 私の推測では、どのアドレスに返信する必要があるかを知ることは、ネットワーク通信のかなり低レベルの機能です...

于 2009-03-15T21:48:09.547 に答える