我正在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();
}
我错过了什么吗?如何实现服务器的可用性?
答案 0 :(得分:0)
尝试在调用Agent
时将Start
存储在服务类中,并在调用Stop
时将其置于服务关闭状态。
另一方面,如果这是问题,那么你的控制台应用程序也没有充分的理由。 C#不是C ++,离开作用域时没有调用析构函数。另外,为什么远程处理而不是更多支持?