1

WCFでWebキャストを視聴していますが、app.configで2つのエンドポイントが定義されています。1netTcpBindingつと1つmexHttpBindingです。

また、2つのベースアドレスとがnet.tcp://localhost:9000ありhttp://localhost:8000ます。

それらのベースアドレスをエンドポイントにどのように関連付けるのか疑問に思います。エンドポイントでtcpまたはhttpが指定されているのに、ベースアドレスの前にnet.tcpとhttpが付いているのはなぜですか。

WCFがnetTcpBindingエンドポイントでnet.tcpベースアドレスを使用する場合、9000と9001をリッスンする2つのtcpエンドポイントがある場合はどうなりますか?競合を防ぐために構成に何を入れますか?

4

3 に答える 3

6

それらのベースアドレスをエンドポイントにどのように関連付けるのか疑問に思います。

プロトコルごと。

サービスエンドポイントを定義するときに、エンドポイントの相対アドレスまたは絶対アドレスを指定できます。絶対エンドポイントアドレスを指定すると、ベースアドレスは実際のエンドポイントアドレスの生成に使用されませんが、エンドポイントに相対アドレスを指定すると、ベースアドレスと相対アドレスの組み合わせを使用して、最終的なエンドポイントアドレスが生成されます。

相対エンドポイントアドレスは次のようになります。例:

  <endpoint address="/hostHttp"  binding="wsHttpBinding"  contract="IMyService" />
  <endpoint address="/hostNetTcp"  binding="netTcpBinding"  contract="IMyService" />

これで、WCFは、プロトコルごとに定義したベースアドレスを使用して実際のエンドポイントアドレスを生成します。

<baseAddresses>
            <add baseAddress="http://localhost:8550/MyServiceHost/Service"/>
            <add baseAddress="net.tcp://localhost:8551/MyServiceHost/Service"/>
</baseAddresses>

したがって、HTTPエンドポイントアドレスは最終的に次のようになります。

http://localhost:8550/MyServiceHost/Service/hostHttp

およびnetTcpエンドポイント:

net.tcp://localhost:8551/MyServiceHost/Service/hostNetTcp

これで、別のプロトコルが定義されていて、エンドポイントに絶対アドレスが定義されていない場合、WCFはその特定のプロトコルに定義されたベースアドレスを探し、ベースアドレスを使用してエンドポイントを生成します。

WCFがnetTcpBindingエンドポイントでnet.tcpベースアドレスを使用する場合、9000と9001をリッスンする2つのtcpエンドポイントがある場合はどうなりますか?競合を防ぐために構成に何を入れますか?

この場合、ypourエンドポイントに絶対アドレスを指定するのが最善だと思います。

<endpoint address="net.tcp://localhost:9000/MyServiceHost/Service"
                   binding="netTcpBinding"
                   contract="IMyService" />

<endpoint address="net.tcp://localhost:9001/MyServiceHost/Service"
                   binding="netTcpBinding"
                   contract="IMyService" />

前述のように、絶対アドレスを指定する場合、エンドポイントアドレスを生成する際にベースアドレスは参照されません。

あなたはこれを見てみたいと思うかもしれません。

于 2012-05-16T08:36:33.090 に答える
0

複数のベースアドレスについて。正しいアドレスを選択する方法はわかりませんが、「サービスに複数のベースアドレスを設定することもできますが、各サービスで許可されるベースアドレスはトランスポートごとに1つだけです」と、詳細はこちらをご覧ください。

同じタイプの2つのベースアドレスを持つことはできません。

于 2012-05-16T08:29:18.683 に答える
0

私は少し誤解しているかもしれませんが、net.tcpアドレスをnettcpbindingに関連付けるように修正したい場合(そしてなぜそうするのかわかりません!)-設定ファイルのprotocolmappingセクションでそうすることができます

ここで強調表示されているように

于 2012-05-16T09:18:17.693 に答える