如何在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#
感谢。
答案 0 :(得分:1)
您通常不会访问Windows服务上的方法。你想要完成什么?
Windows服务可以托管可以从其他应用程序访问的WCF服务。这可能是你正在寻找的。 p>
答案 1 :(得分:1)
您可以通过实施ServiceBase.OnCustomCommand
来处理Windows服务的自定义命令,并通过调用ServiceController.ExecuteCommand
发送它们。
但是,这种“命令”只是128到256之间的命令标识符。没有参数或返回值。
在大多数情况下,这是不够的,您必须在Windows服务中托管WCF服务,正如其他人所建议的那样。
答案 2 :(得分:0)
您似乎对“服务”一词的两种不同用法感到困惑。
一方面,存在“服务进程”,这是长时间运行的后台进程,它们在后台运行,并且很少(如果有的话)对用户可见。这就是你上面创造的。但是,您通常不会直接在此类服务上调用方法 - 它是进程,而不是对象。
然后是“服务API”,在.NET中通常意味着WCF。服务API是一组方法,可以远程访问 - 跨进程,甚至从一台计算机到另一台计算机。 WCF提供了一种在.NET中创建和使用此类服务的超级简便方法。
“服务流程”可以托管“服务API” - 事实上,它通常会。但在这种情况下,您需要定义和调用服务接口,而不仅仅是调用ServiceController
对象上的方法。