WCF开发常见问题:“There is already a listener on IP endpoint 0.0.0.0:4503”
在寄宿到控制台的WCF服务启动时或者运行期间,经常自己停掉,通过日志记录可以看到
2010/10/27 10:19:08 : There is already a listener on IP endpoint 0.0.0.0:4503. Make sure that you are not trying to use this endpoint multiple times in your application and that there are no other applications listening on this endpoint.
应该是同一个端口被多个服务监听了,查了一下服务的配置,果然如此
代码
<service behaviorConfiguration="WCFService.Behavior" name="WCFService.SynchronizationService">
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:4503/SynchronizationService"/>
</baseAddresses>
</host>
<endpoint address="" binding="netTcpBinding" contract="WCFService.ISynchronizationService" bindingConfiguration="netTcpBindConfig"></endpoint>
<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" ></endpoint>
</service>
<service behaviorConfiguration="WCFService.Behavior" name="AuthenticateService">
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:4503/AuthenticateService"/>
</baseAddresses>
</host>
<endpoint address="" binding="netTcpBinding" contract="IAuthenticateService" bindingConfiguration="netTcpBindConfig"></endpoint>
<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" ></endpoint>
</service>
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:4503/SynchronizationService"/>
</baseAddresses>
</host>
<endpoint address="" binding="netTcpBinding" contract="WCFService.ISynchronizationService" bindingConfiguration="netTcpBindConfig"></endpoint>
<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" ></endpoint>
</service>
<service behaviorConfiguration="WCFService.Behavior" name="AuthenticateService">
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:4503/AuthenticateService"/>
</baseAddresses>
</host>
<endpoint address="" binding="netTcpBinding" contract="IAuthenticateService" bindingConfiguration="netTcpBindConfig"></endpoint>
<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" ></endpoint>
</service>
于是将其中一个服务的端口改掉成4504即可。
为了保证端口的唯一性,首先这个端口不能是常见的系统端口,其次不能是其他服务所用的端口。