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

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

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

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

Service1 s = new Service1(); MessageBox.Show(s.GetMyRandomNumber().ToString()); 

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

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

感谢您分享宝贵的时间。

你应该看看Remoting

  • 使用C#进行远程处理(链接不再可用)
  • 如何在Windows服务应用程序中承载.NET远程处理对象
  • 如何使用.Net Remoting使用(链接不再可用)
  • .NET Remoting的简单介绍

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

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

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

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

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

与正在运行的服务进行通信与在任何其他正在运行的进程上调用方法没有什么不同。 这意味着您需要挖掘出用于过程到过程通信的标准工具。

Windows Communication Foundation (WCF)将是我的默认选择。 您可以在Windows服务中托管WCF服务,并通过命名管道端点公开它以进行有效通信。

WCF将在同一台计算机上进行通信过度。 管道是一种更简单,更有效的解决方案。

您可以使用Windows Communication Foundation和IPC( 进程间通信 )与您的服务进行通信并执行您的方法。