デフォルトでは、IIS 7 Web サイトには "808: " バインディング情報文字列を使用した net.tcp バインディングがあります。「xxx:」で別の net.tcp バインディングを追加すると、例外が発生します。
このコレクションには、スキーム net.tcp のアドレスが既に含まれています。このコレクションには、スキームごとに 1 つのアドレスしか存在できません。パラメータ名:item
この問題を解決し、2 つのポートでサービスをリッスンするにはどうすればよいですか?
基本的に、サービスでは、任意の数のポートに任意の数のサービス エンドポイントを定義できる必要があります。
これを行うには 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 つの別々のエンドポイントがあり、どちらもバックグラウンドで同じサービス クラスによってリッスンし、サービスを受けています。
マルク
先日、Web サーバーの 1 つに WCF サービスをデプロイしようとしたところ、問題が発生しました。次のエラー メッセージが表示され続けました:p>
このコレクションには、スキーム http のアドレスが既に含まれています。このコレクションには、スキームごとに 1 つのアドレスしか存在できません。パラメータ名: item
問題はローカル マシンでは発生しませんでしたが、Web サーバーで発生したため、原因を特定するのが少し困難でした。私のWebサーバーは共有ホスティング環境にあるため、サーバーで発生しました。この場合、WCFサービスもホストヘッダーを認識する必要があります。これを行うには、web.config に移動し、以下を追加しました。
<serviceHostingEnvironment>
<baseAddressPrefixFilters>
<add prefix=http://MyHostHeader />
</baseAddressPrefixFilters>
</serviceHostingEnvironment>
その私は再び。
これはセルフホストで動作します
<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ホスティング環境についてでした