如何调用可执行文件从MVC Web应用程序启动服务

时间:2013-10-07 17:38:36

标签: c# asp.net-mvc service

我有一个MVC4应用程序,我需要在其中初始化一个长时间运行的进程。目前,此过程的代码位于作为topshelf服务安装的控制台应用程序中。我每隔几秒就检查一次数据库以查看是否需要运行,但这不是解决方案。我需要一种方法让MVC4应用程序启动进程并忘记它,但是当响应返回给客户端时,不会使用Web应用程序卸载该进程。

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你可以做的是,在服务(从ServiceBase派生的类)中,重写OnCustomCommand:

private const int MY_CUSTOM_COMMAND = 140;
protected override void OnCustomCommand(int command)
{
    if (command == MY_CUSTOM_COMMAND)
    {
       ... Do stuff here ...
    }
}

然后,您可以从以下这些行的某个外部应用程序中触发服务中的命令:

private const int MY_CUSTOM_COMMAND = 140;
using (ServiceController sc = new ServiceController("MyTaskService", "ServiceMachine"))
{
   sc.ExecuteCommand(MY_CUSTOM_COMMAND);
}

这是基本的想法。自定义命令可以是128-256(包括128-256)的任何值。

我们在网络应用程序中使用类似的系统,允许用户提交随后由Windows服务运行的“作业”。 Web应用程序向Windows服务发送命令,以使其知道已提交新作业。然后,该服务转到数据库以获取有关要执行的作业的信息。