C# 为什么我的HTTP侦听器程序作为Windows窗体项目工作,而不在Windows服务中工作?

C# 为什么我的HTTP侦听器程序作为Windows窗体项目工作,而不在Windows服务中工作?,c#,sockets,service,C#,Sockets,Service,我使用套接字创建了一个简单的异步服务器,它侦听HTTP请求,并在每次收到某个IP地址和端口上的请求时调用函数RequestCallback() 当我在Windows窗体项目中运行它时,它会工作,但当我将代码添加到Windows服务项目中时,它会运行,但不会调用RequestCallback()。请参阅下面对Log.Write()的两个调用 该服务作为网络服务运行(服务>登录为=“网络服务”),我无法更改此设置;这是由客户决定的。我尝试暂时将服务更改为以本地用户身份登录,但第二条log语句仍然没有

我使用套接字创建了一个简单的异步服务器,它侦听HTTP请求,并在每次收到某个IP地址和端口上的请求时调用函数
RequestCallback()

当我在Windows窗体项目中运行它时,它会工作,但当我将代码添加到Windows服务项目中时,它会运行,但不会调用
RequestCallback()
。请参阅下面对
Log.Write()
的两个调用

该服务作为网络服务运行(服务>登录为=“网络服务”),我无法更改此设置;这是由客户决定的。我尝试暂时将服务更改为以本地用户身份登录,但第二条log语句仍然没有编写

class http_listener
{
   bool _stop; 

   main ()
    { 
        _stop = false;

        _eventListenerThread = new Thread(ListenForEvents);
        _eventListenerThread.Name = "Event listener thread";
        _eventListenerThread.Start();
    }

    private void ListenForEvents()
    {
        Socket _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        System.Net.IPAddress ipAddress = System.Net.IPAddress.Parse("1.2.3.4");
        System.Net.EndPoint endPoint = new System.Net.IPEndPoint(ipAddress, 8000);
        _socket.Bind(endPoint);
        _socket.Listen(1000);

        while (!_stop)
        { 
            Log.Write("this shows up in log every 2 seconds, even when run as service");
            Thread.Sleep(2000);
            _recvBufSize = 1000; // max bytes to recieve
            _begAcceptResult = _socket.BeginAccept(null, _recvBufSize, new AsyncCallback(RequestCallback), _socket);
        }
        _eventListenerThread = null;
    }

    private void RequestCallback(IAsyncResult begAcceptResult)
    {
        Log.Write("this is NOT written to log when run as service");
        Socket socket = (Socket)begAcceptResult.AsyncState;
        // write request packet to log 
        byte[] buf;
        int bytesTransferred;
        Socket endSocket = socket.EndAccept(out buf, out bytesTransferred, begAcceptResult);
        string stringTransferred = Encoding.ASCII.GetString(buf, 0, bytesTransferred);
        Log.Write(stringTransferred);
    }
}

让它工作起来。由于某些原因,当我将服务器作为服务运行时,该端口被Windows防火墙阻止,但当我将服务器作为窗体应用程序运行时,该端口未被阻止

以下是我更改的设置:


控制面板>Windows防火墙>高级设置>入站规则>(右键单击服务名称)>属性>“协议和端口”选项卡>本地端口>将8000添加到已列出的端口中

第一次从visual studio运行时,很可能会弹出一个请求允许的弹出窗口,很明显,你不会从服务中得到这些。还要注意的是,
HTTPListener
是一个真实的东西,这让我有一秒钟的紧张。