У меня есть служба 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.
Если при закрытии программы на порту было открытое соединение, и TCP не завершил четырехстороннее закрытое рукопожатие, то сокет останется «полузакрытым» до истечения тайм-аута (даже если программа завершилась. ), и вы не сможете снова открыть этот порт. Различные реализации имеют разные тайм-ауты, обычно от 1/2 секунды до 2 минут.