10

二重コールバックに WSDualHttpBinding を使用すると、実際のシナリオで機能しますか? たとえば、ランダム ポートを使用する .NET アプリケーションがあるとします。サービスはクライアントのベース アドレスとポートをコールバック用に解決できますか?

4

2 に答える 2

35

あなたの質問に対する完全な回答は、「現実世界のシナリオ」がイントラネットまたはインターネットのシナリオであるかによって異なります。WSDualHttpBinding は両方のシナリオで機能しますが、注意すべき点があります。

イントラネット

WSDualHttpBinding は、イントラネット シナリオで事前に構成されたカスタム ポートを使用して .NET アプリケーションで動作し、「はい」サービスはクライアントのベース アドレスとコールバック用のポートを解決できます。正確な方法については、以下で説明します。以下で説明する理由は、WSDualHttpBinding が主にインターネット上で使用されるように設計されているためです。

クライアントとサーバーの両方で WCF を使用できるイントラネット シナリオでの二重コールバックは、NetTcpBinding または NetNamedPipeBinding を使用することによって最適に実現されます。これらのバインディングは、(HTTP ではなく) トランスポートとして TCP と ICP をそれぞれ使用し、カスタム バイナリ エンコーディングを使用するため、両側で WCF が必要になります。クライアントへのコールバックの場合、バインディングを介してサービスに接続するために使用される同じチャネルが再利用され、新しいポートを開く必要はありません。

インターネット

インターネット シナリオでは、有効な HTTP 要求と応答は一方向にのみ移動します。HTTP は一方向プロトコルとして設計されています。したがって、WSDualHttpBinding を使用すると、WCF はコールバック用に別の HTTP チャネルを作成します。2 番目の質問への回答: クライアントへのこのコールバックの宛先アドレスは、デフォルトでクライアント マシンのホスト名とポート 80 で構成されます。たとえば、クライアントが開発マシンであり、IIS がインストールされている場合、一部のシナリオではポート 80 が排他的に予約され、プロトタイプ アプリケーションとの競合が発生します。これがこのブログ記事ですClientBaseAddress プロパティが何を支援するように設計されているかの解決策を示します。使用するポート (デフォルトまたはカスタム) に関係なく、送信チャネルと個別のコールバック チャネルの両方を確立できるように、両側のすべてのファイアウォールとルーターが正しく構成されていることを確認する必要があります。

.NET アプリケーションは、Silverlight アプリケーションを表すこともできます。ブラウザーで実行されている Silverlight アプリケーションは新しい受信 HTTP 接続を受け入れることができないため、別のバック チャネルを使用した WSDualHttpBinding は機能しません。したがって、PollingDuplexHttpBinding は最初に Silverlight 2 で作成されました。これは、HTTP が単方向であるという事実を回避するための巧妙な「トリック」と考えることができます。これは、リクエスト チャネルを長時間開いたままにし (ロング ポーリング)、それをバック チャネルとして使用することで実現します。クライアントにコールバックします。これには、特にスケーリングに関連するクライアント側とサーバー側の両方に多くの影響があります。詳細については、私のブログのこの投稿を参照してください。

あなたの特定の「現実世界のシナリオ」とユースケースを考えれば、うまくいけば、これは二重コールバックに使用する正しいバインディングを解決するのに役立ちます.

于 2009-08-08T10:07:23.467 に答える
2

ファイアウォールの背後にあるアプリケーションの場合、理論的にはそうです。「現実世界」が何を意味するかによって異なります。それによって「高パフォーマンス」を意味する場合は、おそらく NetTcpBinding がより良いアプローチです。

于 2008-09-12T19:08:02.307 に答える