我在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) 在System.Net.Sockets.Socket.Bind(EndPoint localEP) 在System.ServiceModel.Channels.SocketConnectionListener.Listen() ---内部异常堆栈跟踪结束--- 在System.ServiceModel.Channels.SocketConnectionListener.Listen() 在System.ServiceModel.Channels.ConnectionAcceptor.StartAccepting() 在System.ServiceModel.Channels.ExclusiveTcpTransportManager.OnOpen()
我遵循的流程如下:
我再次调整和调整了服务几次,重写了客户端等。似乎没什么用。有趣的是它第一次尝试很好,现在有问题。我已经确保我的服务是使用'netstat -aon'和'tasgmgr.exe'的唯一一个端口。一切都很好看。主机运行,测试客户端的一切都很好。现在端点使用不同的端口,因此应根据在线文档解决TCP Mex问题。我在这里错过了什么吗?我能够使用'svcutil'生成代理,并确保App.Config数据不会冲突。
以下是App.Config数据(因为我正在使用配置文件):
HOST 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>
CLIENT 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>
...