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

时间:2009-12-30 08:05:37

标签: 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());

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

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

感谢您分享宝贵的时间。

5 个答案:

答案 0 :(得分:15)

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

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

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

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

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

答案 1 :(得分:8)

你应该看看Remoting

答案 2 :(得分:3)

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

答案 3 :(得分:2)

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

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

答案 4 :(得分:1)

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