当 运行 代码作为应用程序与作为服务时,打开 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 端口吗?我一直在搜索和玩了一段时间,但什么也想不出来。
我就是个白痴
我没有意识到我需要为该进程打开防火墙,而不仅仅是当我 运行 它作为一个应用程序时。
我正在创建一个将打开侦听 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 端口吗?我一直在搜索和玩了一段时间,但什么也想不出来。
我就是个白痴
我没有意识到我需要为该进程打开防火墙,而不仅仅是当我 运行 它作为一个应用程序时。