0

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

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

4

1 回答 1

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 服务发送命令,让其知道已提交新作业。然后该服务转到数据库以获取有关要执行的作业的信息。

于 2013-10-07T18:06:56.010 回答