Windows服务中的Geniune频道服务器?

时间:2017-05-25 21:35:51

标签: c# networking .net-remoting

我正在Windows服务中开发具有geniune频道的服务器,似乎它并不像控制台应用程序那么简单。当创建服务器的线程完成其作业时,在线程范围中声明的所有变量都将被销毁,因此客户端无法再连接到该服务器。使用Console应用程序,我们可以使用console.readline()来避免这种情况,但对于Windows服务来说情况并不相同。因此,第一个代码块用于创建服务器的Windows服务线程,第二个代码用于控制台应用程序。

public void startServer()
{
 System.Configuration.ConfigurationSettings.GetConfig("DNS");
 GenuineGlobalEventProvider.GenuineChannelsGlobalEvent += new GenuineChannelsGlobalEventHandler(GenuineChannelsEventHandler);
 var Path = AppDomain.CurrentDomain.BaseDirectory;
 RemotingConfiguration.Configure(Path + "Server.exe.config");
 RemotingServices.Marshal(new Agent(), "Server.rem");
}


static void Main(string[] args)
{
 System.Configuration.ConfigurationSettings.GetConfig("DNS");
 GenuineGlobalEventProvider.GenuineChannelsGlobalEvent += new GenuineChannelsGlobalEventHandler(GenuineChannelsEventHandler);
 var Path = AppDomain.CurrentDomain.BaseDirectory;
 RemotingConfiguration.Configure(Path + "Server.exe.config");
 RemotingServices.Marshal(new Agent(), "Server.rem");
 Console.ReadLine();
 }

我错过了什么吗?如何实现服务器的可用性?

1 个答案:

答案 0 :(得分:0)

尝试在调用Agent时将Start存储在服务类中,并在调用Stop时将其置于服务关闭状态。

另一方面,如果这是问题,那么你的控制台应用程序也没有充分的理由。 C#不是C ++,离开作用域时没有调用析构函数。另外,为什么远程处理而不是更多支持?