MVC 中的计划作业等效功能

Scheduled Job equivalent functionality in MVC

我的 MVC 应用程序有一个要求。

我导出到 excel 功能需要 3 分钟的时间(用户单击导出按钮并等待)。 在对数据应用特定规则后,此导出下载具有多个工作表的 excel。 这些规则是数据操作加上在属于特定列的单元格上应用颜色。

为了避免等待时间,我被要求在 MVC 应用程序中开发一个代码,可以 运行 像一个预定的作业。 此作业必须在预定时间(每天一次)将 excel 导出到网络中的专用文件夹。 我还被要求在应用程序中开发一个网页,其中包含下载这些 excel 的链接。

这里有问题(任何帮助将不胜感激):

  1. 我选择了Quartz.NET来实现这个要求。这是一个开源(据我所知),可以 提供安排作业的工具(class 在 .NET 中开发)。这是正确的选择还是对未来有什么影响?

  2. 是否真的需要开发像代码这样的工作,或者任何其他编码方式都可以解决这个问题?

我不是很熟悉 Quartz.net,但我知道尝试 运行 background/scheduled 从与 MVC 应用程序相同的进程中执行任务可能会有问题。

参考 1:http://haacked.com/archive/2011/10/16/the-dangers-of-implementing-recurring-background-tasks-in-asp-net.aspx/

参考 2:http://www.hanselman.com/blog/HowToRunBackgroundTasksInASPNET.aspx

本质上,由于 IIS 处理应用程序池的方式(这是 MVC 处理的地方 运行s:假设托管在IIS 无论如何)。

您提到 运行在您的 MVC 应用程序中 计划任务 。同样,这是不正确的。为什么不能直接将控制台应用程序项目添加到解决方案中并从那里驱动代码,然后将其放在服务器上并使用 Windows 任务计划程序?

就后台任务而言,"correct" 执行此操作的方法是将命令从 MVC 应用程序发送到某种消息队列,这样可以确保该命令不会被丢弃。我过去使用过 RabbitMQ(中间件消息代理)。也许这就是Quartz.net的目的。

此设置通常涉及另一个应用程序(对我而言,通常是服务器上的控制台应用程序 运行)从消息队列接收命令消息,运行s 在它自己的进程中,完全与 MVC 分开,从而解决 IIS AppPools 和后台任务固有的问题。

很多工作,真的......人们会认为这会更容易,但这是做到这一点并保持任务完整性的必经之路 运行。