2009-03-15 8 views
2

何かが、私は:(リフレクターとWCFの内側に見えるが、それは理解することはあまりにも難しい私を許ししようとしてきた私にとって非常に奇妙なようです。クライアントAはwsDualHttpBindingとサーバーB上の二重サービスを呼び出すと、私がいることを考えていたWsDualHttpBindingがコールバックチャネルについて知るためにどのようにしていますか?

クライアントAこの

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

しかし OperationContext.Current.IncomingMessageHeaders.ReplyTo戻るヌル...

のような要求のヘッダ内のクライアントベースアドレス(コールバックのアドレス)を含みます

wsDualHttpBindingがクライアントチャネルのアドレスを知る方法

黒い魔法などありますか?

ソリューション

これはのreplyToアドレスを輸送する責任がある信頼性の高いセッションです。私はソケットを使用する場合、呼び出し側のアドレスも利用可能である

答えて

2

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

+0

Fiddlerは同じマシン上の2つのエンドポイント間のトラフィックを表示しません。他のソリューションはありますか? –

+1

メッセージロギング? http://msdn.microsoft.com/en-us/library/aa702726.aspx http://blogs.msdn.com/madhuponduru/archive/2006/05/18/601458.aspx – Brian

+1

ドット(。 )をhttp://localhost./MyService/Service.svcに追加し、フィドラーがそれを取り上げます。 –

0

...我々はcustomBinding

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

reliableSessionを削除するにはこれらの結合要素でこれを確認することができますし、あなたのサービスはもうコールバックチャネルを持っていません - 私の推測では、どのアドレスに応答する必要があるかを知ることは、ネットワーク通信の非常に低いレベルの機能です...

+0

デュプレックスバインディングでは可能ですが、デュプレックスバインディングではIOutputChannel/IInputChannel(WCFの抽象度の最低レベル)を使用します。これらのチャネルは受信または送信できますが、ここにはないと思います。私はリフレクターであなたが正しいかもしれないと確信しています。 –

関連する問題