当 运行 代码作为应用程序与作为服务时,打开 TCP/IP 端口有什么区别?

Any difference opening a TCP/IP port when running code as an application vs as a service?

我正在创建一个将打开侦听 TCP/IP 端口的服务(以使用称为 DNP 的协议)。

为了调试程序,我一直在 Program.cs 文件中使用这段代码:

static void Main()
{  
#if(!DEBUG)
    ServiceBase[] ServicesToRun;
    ServicesToRun = new ServiceBase[] 
    { 
        new ServerDNP() 
    };

    ServiceBase.Run(ServicesToRun);
#else

    ServerDNP ServerDNPProcess = new ServerDNP();
    ServerDNPProcess.MainProcess();
#endif
}

我的 OnStart 看起来像这样:

protected override void OnStart(string[] args)
{
    this.workerThread = new Thread(new ThreadStart(this.MainProcess));
    this.keepRunning = true;
    this.workerThread.Start();
}

在实际过程中,我输出了很多信息到一个日志文件中,我运行无论是作为DEBUG还是Release输出到那个文件看起来都一样。

当我 运行 它作为 DEBUG 时,TCP/IP 端口打开没有问题,我可以从远程机器与它通信。但是当我 运行 它作为一项服务时,我在远程机器上不断收到 "no activity on the socket" 错误。

我需要为服务做些什么才能打开 TCP/IP 端口吗?我一直在搜索和玩了一段时间,但什么也想不出来。

我就是个白痴

我没有意识到我需要为该进程打开防火墙,而不仅仅是当我 运行 它作为一个应用程序时。