2010-05-06 2 views
2

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

  • Отключен брандмауэр, а также попытался добавить явные исключения для EXE, порт и протокол
  • Проверил CAS Policy Config, показывает неограниченные права
  • сконфигурированных Услугу работать в качестве учетной записи администратора, Local System, Local Service и Network Service, каждый с тем же результатом
  • Пробовал разные порты
  • также пытались 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) 
+0

Можете ли вы показать нам код, который вы использовали для настройки конечной точки? Здесь больше информации, но я не уверен, что это вам поможет http://support.microsoft.com/kb/819124 – TimothyP

+0

Конечно, конечная точка была установлена ​​с помощью «нового IPEndPoint (IPAddress.Parse (args [0]), Convert.ToInt32 (args [1])) ". Эти аргументы передаются через панель управления службой, и я подтвердил, что для IP-адресов локальных компьютеров установлено значение 192.168.2.2, а для порта установлено значение 20000, хотя я также пробовал другие порты. – JoeGeeky

+2

Какая операционная система - это то, над чем вы работаете? Какая версия .NET Framework? Кроме того, можете ли вы убедиться, что к этому порту не привязан режим ядра или процесс usermode (netstat -n -a -P TCP)? – feroze

ответ

5

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

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

+0

Спасибо, я дам вам попробовать – JoeGeeky

+0

IPAddress.Any на самом деле 0.0.0.0 – Tarnschaf

+0

Вы, конечно, правы! Я понятия не имею, почему я ставлю значение широковещательной передачи вместо какой-либо ценности ... –

0

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

Смежные вопросы