繁体   English   中英

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

[英]How to call method from running windows service

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

这里的问题是如何使用正在运行的服务以及如何调用该方法。

我尝试添加MyService.exe的引用并以-

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

但是发现该方法未从服务的运行实例中调用,即使即使我停止了该服务,该语句也仍被执行。

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

感谢您分享宝贵的时间。

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

要执行您想要的操作,您有很多选择。

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

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

网络上有很多不错的教程,可用于.NET Remoting或其替代产品Windows Communication Foundation。

您应该看看Remoting

WCF对于在同一台计算机上进行通信将是一个过大的杀伤力。 管道是一种更简单,更有效的解决方案。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM