SocketException, препятствующее использованию C # TCPListener в Windows Service - PullRequest
2 голосов
/ 06 мая 2010

У меня есть служба Windows, которая при запуске выполняет следующие действия. При запуске через консольное приложение все работает нормально, но как только я включаю службу Windows, я получаю следующее исключение. Вот что я пробовал до сих пор:

  • Отключил брандмауэр, также попытался добавить явные исключения для exe, порта и протокола
  • Проверено CAS Policy Config, показаны неограниченные права
  • Настроил службу для работы в качестве учетной записи администратора, локальной системы, локальной службы и сетевой службы, каждая с одинаковым результатом
  • пробовал разные порты
  • Также попробовал 127.0.0.1 просто посмотреть ... та же проблема

Это разрушает мою голову, поэтому любая помощь будет принята с благодарностью:

Код:

var _listener = new TcpListener(endpoint); //192.168.2.2:20000
_listener.Start();

Полученное исключение:

Service cannot be started. System.Net.Sockets.SocketException: An attempt was made to access a socket in a way forbidden by its access permissions
   at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress)
   at System.Net.Sockets.Socket.Bind(EndPoint localEP)
   at System.Net.Sockets.TcpListener.Start(Int32 backlog)
   at System.Net.Sockets.TcpListener.Start()
   at Server.RequestHandler.StartServicingRequests(IPEndPoint endpoint)
   at Server.Server.StartServer(String[] args)
   at Server.Server.OnStart(String[] args)
   at System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state)

Ответы [ 2 ]

5 голосов
/ 11 мая 2010

Я рекомендую вам привязать к конечной точке IPAddress.Any (0.0.0.0) и определенный порт.

Возможно, сообщение об ошибке вызвано тем, что другое приложение уже открыло этот порт или недавно открыло его исключительно .

0 голосов
/ 11 мая 2010

Дополнительная информация о коде ошибки: на MSDN .

...