代码之家  ›  专栏  ›  技术社区  ›  JoeGeeky

socketexception阻止在windows服务中使用c tcplistener

  •  2
  • JoeGeeky  · 技术社区  · 15 年前

    我有一个windows服务,启动时执行以下操作。当通过控制台应用程序运行时,它可以正常工作,但是一旦我加入了windows服务,就会出现以下异常。以下是我迄今为止所做的尝试:

    • 禁用防火墙,还尝试为exe、端口和协议添加显式排除
    • 选中的cas策略配置,显示不受限制的权限
    • 将服务配置为以管理员帐户、本地系统、本地服务和网络服务运行,每个都具有相同的结果
    • 尝试不同的端口
    • 也试过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 回复  |  直到 14 年前
        1
  •  5
  •   Stephen Cleary    14 年前

    我建议您使用ipaddress.any(0.0.0.0)和特定端口绑定到终结点。

    错误消息可能是因为另一个应用程序已打开该端口或最近已打开该端口 exclusively .

        2
  •  0
  •   Stephen Cleary    15 年前

    有关错误代码的更多信息是 on MSDN