5

デフォルトでは、IIS 7 Web サイトには "808: " バインディング情報文字列を使用した net.tcp バインディングがあります。「xxx:」で別の net.tcp バインディングを追加すると、例外が発生します。

このコレクションには、スキーム net.tcp のアドレスが既に含まれています。このコレクションには、スキームごとに 1 つのアドレスしか存在できません。パラメータ名:item

この問題を解決し、2 つのポートでサービスをリッスンするにはどうすればよいですか?

4

3 に答える 3

8

基本的に、サービスでは、任意の数のポートに任意の数のサービス エンドポイントを定義できる必要があります。

これを行うには 2 つの方法があります。

  • サービス エンドポイントでベース アドレスと相対アドレスを定義する
  • 各エンドポイントで完全なアドレスを定義する

オプション#1を実行すると、次のようになります。

<service name="YourService">
  <host>
    <baseAddresses>
      <add baseAddress="net.tcp://YourServer:5151/Services" />
    </baseAddresses>
  </host>
  <endpoint name="endpoint1"
            address="Service1"
            binding="netTcpBinding"
            contract="IYourService" />
  <endpoint name="endpoint2"
            address="Service2"
            binding="netTcpBinding"
            contract="IYourService" />
</service>

この場合、同じコントラクトに 2 つのサービス エンドポイントがあり、それらは URL をリッスンします。

net.tcp://YourServer:5151/Services/Service1

net.tcp://YourServer:5151/Services/Service2

複数のサービス エンドポイントを持つことができますが、ベース アドレスは 1 つだけです。

もう 1 つのオプションは、ベース アドレスを指定せず、エンドポイントで完全なサービス アドレスを直接指定することです。

<service name="YourService">
  <endpoint name="endpoint1"
            address="net.tcp://YourServer:5151/Services/Service1"
            binding="netTcpBinding"
            contract="IYourService" />
  <endpoint name="endpoint2"
            address="net.tcp://YourServer:6868/Services/Service2"
            binding="netTcpBinding"
            contract="IYourService" />
</service>

この場合、エンドポイントでアドレス全体を定義しているため、エンドポイントごとに 1 つずつ、2 つの異なる TCP ポートを選択できます。これはまったく問題なく動作するはずです。2 つの別々のポートに 2 つの別々のエンドポイントがあり、どちらもバックグラウンドで同じサービス クラスによってリッスンし、サービスを受けています。

マルク

于 2009-09-13T06:52:57.843 に答える
2

先日、Web サーバーの 1 つに WCF サービスをデプロイしようとしたところ、問題が発生しました。次のエラー メッセージが表示され続けました:p>

このコレクションには、スキーム http のアドレスが既に含まれています。このコレクションには、スキームごとに 1 つのアドレスしか存在できません。パラメータ名: item

問題はローカル マシンでは発生しませんでしたが、Web サーバーで発生したため、原因を特定するのが少し困難でした。私のWebサーバーは共有ホスティング環境にあるため、サーバーで発生しました。この場合、WCFサービスもホストヘッダーを認識する必要があります。これを行うには、web.config に移動し、以下を追加しました。

<serviceHostingEnvironment>
<baseAddressPrefixFilters>    
    <add prefix=http://MyHostHeader />
</baseAddressPrefixFilters>
</serviceHostingEnvironment>
于 2010-06-13T13:19:03.963 に答える
0

その私は再び。

これはセルフホストで動作します

 <baseAddresses>
            <add baseAddress="net.tcp://localhost" />
            <add baseAddress="net.tcp://localhost:12345" />
 </baseAddresses>

ただし、IIS7+WASでは例外が発生します

net.tcp:// localhost:12345/game2.svcに接続できませんでした。接続の試行は00:00:02.0936160の期間続きました。TCPエラーコード10061:ターゲットマシンが127.0.0.1:12345をアクティブに拒否したため、接続できませんでした。

質問はIISホスティング環境についてでした

于 2009-09-14T12:11:58.633 に答える