SocketException阻止在Windows服务中使用C#TCPListener

Joe*_*eky 2 c# sockets permissions tcplistener exception

我有一个Windows服务,启动时执行以下操作.通过控制台应用程序运行时它工作正常,但一旦我放入Windows服务,我得到以下异常.这是我到目前为止所尝试的:

  • 禁用防火墙,还尝试为exe,端口和协议添加显式排除
  • 选中的CAS策略配置,显示不受限制的权限
  • 将服务配置为以管理员帐户,本地系统,本地服务和网络服务运行,每个服务具有相同的结果
  • 尝试过不同的端口
  • 还尝试了127.0.0.1只是为了看...同样的问题

这是破坏我的头,所以任何帮助将不胜感激:

代码:

var _listener = new TcpListener(endpoint); //192.168.2.2:20000
_listener.Start();
Run Code Online (Sandbox Code Playgroud)

由此产生的异常:

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)
Run Code Online (Sandbox Code Playgroud)

Ste*_*ary 5

我建议您使用IPAddress.Any(0.0.0.0)和特定端口绑定到端点.

错误信息可能是因为另一个应用程序已经拥有该端口开放或者最近已经有它打开独占.