.net 在windows服务上调用自定义方法
如何在windows服务上调用自定义方法:.net 在windows服务上调用自定义方法,.net,windows-services,.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 w
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#
谢谢。您通常不会访问Windows服务上的方法。你想完成什么
Windows服务可以承载可从其他应用程序访问的WCF服务。这可能就是你想要的。你似乎被“服务”这个词的两种不同用法弄糊涂了 一方面,存在“服务流程”,这些流程是在后台工作的长期运行的后台流程,很少(如果有的话)对用户可见。这就是你在上面创造的。然而,您通常不会直接在这样的服务上调用方法——它是一个进程,而不是一个对象 还有“服务API”,在.NET中通常指WCF。服务API是可以远程访问的方法的集合——跨进程,甚至从一台计算机到另一台计算机。WCF提供了一种在.NET中创建和使用此类服务的超级简单的方法
“服务流程”可能承载“服务API”——事实上,它通常承载“服务API”。但是在这种情况下,您需要定义和调用服务接口,而不仅仅是调用
ServiceController
对象上的方法。您可以通过实现ServiceBase.OnCustomCommand
来处理Windows服务的自定义命令,并通过调用ServiceController.ExecuteCommand
来发送这些命令
然而,这种“命令”只是一个介于128和256之间的命令标识符。没有参数或返回值
在大多数情况下,这是不够的,您必须像其他人建议的那样在Windows服务中承载WCF服务。Windows服务正在处理一些请求。它可以创建20个线程。我需要在满足某个条件时终止其中一个线程。然后你应该在Windows服务中托管一个小的WCF服务。调用时,这将设置一个标志,该标志从您想要的线程可见。当该线程看到设置的标志时,它将自杀。一般来说,杀死线程是个坏主意。