如何从asp.net调用Windows服务

时间:2009-05-14 05:08:08

标签: asp.net windows-services

如果我创建Windows服务,有没有办法从asp.net调用该服务?

3 个答案:

答案 0 :(得分:9)

通过

  

“致电该服务”

你是说,管理服务吗?如,开始,停止,重启等? 如果是这样,那么答案是肯定的。 在www.csharp-examples.net上有一篇很好的文章将向您展示如何使用ServiceController类。

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

答案 1 :(得分:3)

一些清晰度会有所帮助 - 您也可以将“调用该服务”解释为从ASP.NET到您的服务的某种远程方法调用 - 例如在Windows服务中存储某些状态。

在Windows服务中托管服务端点,例如使用Remoting,WCF或普通ol'TCP套接字服务器。所有这些都可以由ASP.NET中托管的客户端调用。

有很多远程处理和WCF示例可以做到这一点 - 搜索托管和其中一种技术。

要读取的某些MSDN链接:

Remoting

WCF

您还应该阅读Windows Process Activation - 您可以在不编写单独服务的情况下离开。

答案 2 :(得分: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