在Windows服务上调用自定义方法

时间:2010-07-30 19:46:21

标签: .net windows-services

如何在Windows服务上调用自定义方法:

public class TestService:ServiceBase
{
   public TestService()
   {
      // constructor
   }

 protected override void OnStart(string[] args)
 {
    // do some work here
 }

 protected override void OnStop()
 {
    // do some work here
 }

 public void TestMethod(int arg)
 {
     // do some work here
 }
}

我知道该服务的名称是“TestService”,所以我可以执行以下操作:

ServiceController sc = new ServiceController("TestService");

但如果我执行以下操作,则无效

sc.TestMethod(5);       // cannot do this

如何访问服务上的方法?我正在使用c#

感谢。

3 个答案:

答案 0 :(得分:1)

您通常不会访问Windows服务上的方法。你想要完成什么?

Windows服务可以托管可以从其他应用程序访问的WCF服务。这可能是你正在寻找的。

答案 1 :(得分:1)

您可以通过实施ServiceBase.OnCustomCommand来处理Windows服务的自定义命令,并通过调用ServiceController.ExecuteCommand发送它们。

但是,这种“命令”只是128到256之间的命令标识符。没有参数或返回值。

在大多数情况下,这是不够的,您必须在Windows服务中托管WCF服务,正如其他人所建议的那样。

答案 2 :(得分:0)

您似乎对“服务”一词的两种不同用法感到困惑。

一方面,存在“服务进程”,这是长时间运行的后台进程,它们在后台运行,并且很少(如果有的话)对用户可见。这就是你上面创造的。但是,您通常不会直接在此类服务上调用方法 - 它是进程,而不是对象

然后是“服务API”,在.NET中通常意味着WCF。服务API是一组方法,可以远程访问 - 跨进程,甚至从一台计算机到另一台计算机。 WCF提供了一种在.NET中创建和使用此类服务​​的超级简便方法。

“服务流程”可以托管“服务API” - 事实上,它通常会。但在这种情况下,您需要定义和调用服务接口,而不仅仅是调用ServiceController对象上的方法。