无法开始监听某个 TCP 端口,但当前没有任何内容在监听该端口

无法开始监听某个 TCP 端口,但当前没有任何内容在监听该端口

我有一个 Windows 服务,它使用 WCF 服务主机侦听 TCP 端口 61000 上的连接。当我尝试启动该服务时,出现错误:

Service cannot be started. System.ServiceModel.AddressAlreadyInUseException: HTTP could not register URL http://+:61000/ because TCP port 61000 is being used by another application. ---> System.Net.HttpListenerException: The process cannot access the file because it is being used by another process
   at System.Net.HttpListener.AddAll()
   at System.Net.HttpListener.Start()
   at System.ServiceModel.Channels.SharedHttpTransportManager.OnOpen()
   --- End of inner exception stack trace ---
   at System.ServiceModel.Channels.SharedHttpTransportManager.OnOpen()
   at System.ServiceModel.Channels.TransportManager.Open(TransportChannelListener channelListener)
   at System.ServiceModel.Channels.TransportManagerContainer.Open(SelectTransportManagersCallback selectTransportManagerCallback)
   at System.ServiceModel.Channels.HttpChannelListener.OnOpen(TimeSpan timeout)
   at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
   at System.ServiceModel.Dispatcher.ChannelDispatcher.OnOpen(TimeSpan timeout)
   at...

快速netstat -a显示端口 61000 上没有任何内容在监听。我还在网上找到了几篇帖子,提到使用以下方式保留命名空间netstat,但服务运行的帐户具有管理员权限,因此这不是必要的。

关于我为什么收到此消息还有其他想法吗?

此服务在 64 位 Windows Server 2008 R2 Standard 上运行。

答案1

如果程序关闭时端口上有打开的连接,并且 TCP 未完成 4 次关闭握手,则套接字将保持“半关闭”状态,直到超时到期(即使程序已终止),并会阻止您再次打开该端口。各种实现的超时时间不同,通常范围从 1/2 秒到 2 分钟。

相关内容