如何从运行Windows服务调用方法

Irf*_*aza 7 c# windows-services .net-2.0

我使用c#2005创建并启动了Windows服务Service1(使用exe作为MyService.exe).我已经包含了一个方法GetMyRandomNumber(),它返回一个随机的double值.

这里的问题是如何使用这个运行服务,我怎么能调用该方法.

我尝试添加MyService.exe的引用并访问该方法 -

Service1 s = new Service1();
MessageBox.Show(s.GetMyRandomNumber().ToString());
Run Code Online (Sandbox Code Playgroud)

但是发现该方法不是从正在运行的服务实例中调用的,即使我停止服务也会执行语句.

有人可以解释我如何从运行服务实例调用该方法.

感谢您分享宝贵的时间.

Ala*_*lan 15

在您的代码中,您实际上并未调用该服务,而是引用可执行文件并从该程序集调用方法(在运行时,.NET Framework将使用本地程序集来执行代码,而不是正在运行的服务).

要做你想做的事,你有很多选择.

在.NET 2.0中,您将使用.NET Remoting.您可以创建远程处理接口,其他程序集可以使用它来调用跨可执行文件的方法.

在.NET 3.0中,远程处理被WCF取代.您的服务将成为WCF服务,这将使GetRandomNumber()作为其数据协定的一部分公开.应用程序可以使用合同并连接到您的服务以调用该方法.

网上有很多关于.NET Remoting或其替代版Windows Communication Foundation的好教程.

  • 如果在.NET 3.0+上,+1 WCF将是这种情况下的正确选择.为了完整起见,我想补充一点,虽然WCF在几乎所有情况下都取代了Remoting,但它仍然具有跨AppDomain通信的利基 - 我不会使用WCF跨AppDomain边界进行通信,但在所有其他情况下,WCF是正确的选择. (2认同)

Adr*_*der 8

你应该看看Remoting

  • 如果在.NET 3.0+上,远程处理不是一个好的选择.我更喜欢艾伦的回答. (2认同)