Não é possível iniciar a escuta em uma determinada porta TCP, mas não há nada atualmente escutando nela

2

Eu tenho o serviço do Windows que usa um host de serviço do WCF para escutar as conexões na porta TCP 61000. Quando tento iniciar o serviço, recebo o erro:

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...

Um rápido netstat -a mostra que não há nada escutando na porta 61000. Também encontrei vários posts on-line que mencionam reservar namespaces usando netstat , mas a conta na qual o serviço é executado tem privilégios de administrador, portanto, isso não deve ser necessário.

Alguma outra ideia de porque estou recebendo esta mensagem?

Este serviço está sendo executado no Windows Server 2008 R2 Standard de 64 bits.

    
por John Rasch 15.02.2011 / 19:26

1 resposta

2

Se houver uma conexão aberta na porta quando o programa foi fechado e o TCP não concluir o handshake de quatro vias, o soquete permanecerá "meio fechado" até que o tempo limite tenha expirado (mesmo que o programa foi encerrado) e impedirá que você abra essa porta novamente. Várias implementações têm tempos limite diferentes, normalmente variando de 1/2 segundo a 2 minutos.

    
por 16.06.2012 / 04:37