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

本文关键字:Web MVC 应用 启动 服务 可执行文件 何调用 调用 | 更新日期: 2023-09-27 18:34:20

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

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

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

如果我理解你的问题,你可以做的是在服务(从 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)。

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

相关文章: