如何从asp.net调用Windows服务

8
如果我创建了一个Windows服务,有没有办法从asp.net中调用该服务?
3个回答

9

你的意思是要管理该服务吗?比如启动,停止,重启等操作? 如果是的话,答案是肯定的。 有一篇很好的文章在www.csharp-examples.net上,将向您展示如何使用ServiceController类。

然而,如果你的意思是像Web服务一样发送消息给它,那么答案就取决于你如何公开你的服务。Windows服务可以托管WCF服务,因此如果您想将Windows服务公开给Internet客户端,则这将是一个不错的选择。


3
一些明确的解释会有所帮助 - "调用该服务" 也可以理解为从ASP.NET对您的服务进行某种远程方法调用,例如将某些状态存储在Windows服务中。
在Windows服务中托管服务端点,例如使用Remoting,WCF或普通的TCP套接字服务器。所有这些都可以由托管在ASP.NET中的客户端调用。
有很多关于Remoting和WCF的示例可供参考 - 搜索其中一项技术的主机。
一些MSDN链接可供阅读: Remoting WCF 您还应该阅读有关Windows Process Activation的内容 - 您可能可以不编写单独的服务。

1
作为补充,如果要发送一个(非常)简单的消息,也可以使用ServiceController.ExecuteCommand(int command)。通过使用executecommand,发送integer/enum作为消息非常容易。
var myService = new ServiceController("SimpleService");
myService.ExecuteCommand(128);
myService.ExecuteCommand((int)SimpleServiceCustomCommands.ScanFiles);

myService看起来像:

public class myService : ServiceBase
{ 
  ...
  protected override void OnCustomCommand(int command)
  {
    //executes logic   

重要的是注意到这个命令最多传递129个值(128-256),并且不返回任何内容。这不是一个一般的传递消息的方式,最好的情况是避免在服务上轮询,以便您可以向其推送启动信号。所有有关要完成的作业及其结果的信息都需要放置在共享空间中,例如共享文件、数据库、消息队列等。 - Chris Moschini

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接