【发布时间】:2012-10-06 09:14:54
【问题描述】:
我最近在我的服务器上安装了新的 .NET Framework 4.5(以前安装了 4.0),当我启动公开 WCF 端点的 Windows 服务时,我收到了 System.ServiceModel.AddressAlreadyInUseException。
System.ServiceModel.AddressAlreadyInUseException: 已经有一个 IP 端点 0.0.0.0:56543 上的侦听器。如果有 另一个应用程序已经在此端点上侦听,或者如果您有 服务主机中具有相同 IP 的多个服务端点 端点但具有不兼容的绑定配置。 ---> System.Net.Sockets.SocketException:每个套接字仅使用一次 地址(协议/网络地址/端口)通常允许在 System.Net.Sockets.Socket.DoBind(端点 endPointSnapshot, SocketAddress 套接字地址)在 System.Net.Sockets.Socket.Bind(EndPoint localEP) 在 System.ServiceModel.Channels.SocketConnectionListener.Listen() --- 内部异常堆栈跟踪结束 --- 在 System.ServiceModel.Channels.SocketConnectionListener.Listen() 在 System.ServiceModel.Channels.BufferedConnectionListener.Listen() 在 System.ServiceModel.Channels.ExclusiveTcpTransportManager.OnOpen()
在 System.ServiceModel.Channels.TransportManager.Open(TransportChannelListener 频道监听器)在 System.ServiceModel.Channels.TransportManagerContainer.Open(SelectTransportManagersCallback selectTransportManagerCallback) 在 System.ServiceModel.Channels.TransportChannelListener.OnOpen(时间跨度 超时)在 System.ServiceModel.Channels.ConnectionOrientedTransportChannelListener.OnOpen(时间跨度 超时)在 System.ServiceModel.Channels.TcpChannelListener`2.OnOpen(TimeSpan 超时)在 System.ServiceModel.Channels.CommunicationObject.Open(时间跨度 超时)在 System.ServiceModel.Dispatcher.ChannelDispatcher.OnOpen(时间跨度 超时)在 System.ServiceModel.Channels.CommunicationObject.Open(时间跨度 超时)在 System.ServiceModel.ServiceHostBase.OnOpen(时间跨度 超时)在 System.ServiceModel.Channels.CommunicationObject.Open(时间跨度 超时)在 Qosit.Infrastructure.UnisServer.OnStart(String[] args)
我的 WCF 端点的配置如下所示:
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="NetTcpBindingConfiguration" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10" maxReceivedMessageSize="65536">
<readerQuotas maxDepth="32" maxStringContentLength="5242880" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
</binding>
</netTcpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
<behavior name="MEX">
<serviceMetadata/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="MEX" name="MyAssembly.MyNamespace.MyService">
<endpoint address="net.tcp://localhost:56543/MyService"
binding="netTcpBinding" bindingConfiguration="NetTcpBindingConfiguration" contract="MyAssembly.MyNamespace.MyServiceInterface" />
<endpoint address="net.tcp://localhost:56543/MEX" binding="mexTcpBinding"
contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>
我认为它与使用相同端口的 MEX 端点有关,但我不确定升级到 .NET Framework 4.5 后如何正确配置它。
WCF 是否发生了变化,导致这些配置引发异常?
【问题讨论】:
-
我会用TCPView 之类的东西检查 TCP 使用情况,看看有什么可能已经在使用该端口。另外,请尝试更改为另一个端口,看看您是否仍然遇到同样的问题。最后,this blog post
netTcpBinding有一些关于 MEX 的好信息
标签: wcf .net-4.0 configuration .net-4.5