サービスの service.msc リストに作成してデプロイしたサービスがあります。次に、いくつかの機能をテストするためのテスト クライアントを作成しました。基本的な「最初の」試みは完璧に機能しました。問題は、戻って新しい操作を追加したときに、次のエラーが発生し続けることです。
System.ServiceModel.AddressAlreadyInUseException: IP エンドポイント 0.0.0.0:8080 には既にリスナーがあります。これは、このエンドポイントで既にリッスンしている別のアプリケーションがある場合、またはサービス ホストに同じ IP エンドポイントを持つ複数のサービス エンドポイントがあり、バインディング構成に互換性がない場合に発生する可能性があります。---> System.Net.Sockets.SocketException: System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress) では、通常、各ソケット アドレス (プロトコル/ネットワーク アドレス/ポート) の 1 つの使用のみが許可されます。 Net.Sockets.Socket.Bind(EndPoint localEP) at System.ServiceModel.Channels.SocketConnectionListener.Listen() --- 内部例外スタック トレースの終了 --- System.ServiceModel.Channels.SocketConnectionListener.Listen() で System.ServiceModel.Channels.SocketConnectionListener.Listen() で。 ServiceModel.Channels.ConnectionAcceptor.
私が従ったプロセスは以下のとおりです。
- サービスを停止して、.exe ファイルを解放しました。
- 「installutil /u ...」を使用してサービスをアンインストールしました。
- サービス ライブラリに必要な機能を追加しました。
- ライブラリを再構築し、次に Windows サービスを再構築しました。
- 「installutil ...」を使用してサービスをインストールしました。
- service.msc を使用してサービスを開始しました (これは Autostart です)。
- TestClient と Boom へのサービス参照を更新しようとしました - エラー。
- 手順 1 ~ 7 をもう一度実行しましたが、今回は /mex と既定のサービス アドレスを変更して、別のポートを使用します (per: http://msdn.microsoft.com/en-us/library/aa702636.aspx
- 手順 7 をもう一度実行するとブーム - エラーが再び発生
サービスを何度も微調整したり、いじったり、クライアントを書き直したりしましたが、何も機能していないようです。面白いことに、最初の試行では問題なく動作しましたが、現在は問題があります。「netstat -aon」と「tasgmgr.exe」を使用して、自分のサービスがポート上の唯一のサービスであることを確認しました。これらはすべて問題なく見えます。ホストが実行され、テスト クライアントまですべて問題ありません。現在、エンドポイントは異なるポートを使用しているため、TCP Mex の問題はオンライン ドキュメントに従って解決する必要があります。ここで何か不足していますか?「svcutil」を使用してプロキシを生成でき、App.Config データが競合しないことを確認しました。
以下は App.Config データです (構成ファイルを使用しているため)。
ホスト App.Config (サービス):
<service name="SomeServiceLib.SomeService">
<endpoint address="net.tcp://localhost:8080/SomeService" binding="netTcpBinding" contract="SomeServiceLib.ISomeService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="net.tcp://localhost:8081/SomeService/mex" binding="mexTcpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- NOTE: If net.tcp, must set each to false to avoid exception -->
<serviceMetadata httpGetEnabled="False" httpsGetEnabled="False"/>
<!-- To receive exception details in faults for debugging purposes,
set the value below to true. Set to false before deployment
to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
クライアント App.Config:
<client>
<endpoint address="net.tcp://localhost:8080/SomeService"
binding="netTcpBinding" bindingConfiguration="NetTcpBinding_SomeService"
contract="SomeService"
name="Svc_DefaultEndpoint">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="net.tcp://localhost:8081/SomeService/mex"
binding="mexTcpBinding"
contract="IMetadataExchange"
name="Svc_MexEndpoint">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
</client>
<bindings>
<netTcpBinding>
<binding name="NetTcpBinding_SomeService" />
</netTcpBinding>
</bindings>
...