将代码作为应用程序运行与作为服务运行时打开TCP/IP端口的任何区别

本文关键字:IP 任何 区别 TCP 运行 应用程序 代码 服务 运行时 | 更新日期: 2023-09-27 18:00:38

我正在创建一个服务,该服务将打开一个侦听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运行,还是将输出释放到该文件,看起来都是一样的。

当我将其作为DEBUG运行时,TCP/IP端口打开时没有问题,我可以从远程机器与它通信。但是,当我将其作为服务运行时,我在远程机器上不断收到"套接字上没有活动"的错误。

为了让服务打开TCP/IP端口,我需要为它做什么特别的事情吗?我已经找了一段时间了,什么都想不出来。

将代码作为应用程序运行与作为服务运行时打开TCP/IP端口的任何区别

我只是个白痴。

我没有意识到我需要为这个过程打开防火墙,而不仅仅是在我作为应用程序运行它的时候。