MVC中的计划作业等效功能

时间:2016-12-01 13:28:54

标签: asp.net-mvc scheduled-tasks export-to-excel

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

我有一个导出到excel功能,花了3分钟的时间(用户点击导出按钮等待)。 在对数据应用某些规则后,此导出将下载包含多个工作表的Excel。 这些规则是数据操作,并在属于某些列的单元格上应用颜色。

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

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

  1. 我选择了Quartz.NET来实现这个要求。这是一个开源(据我所知)可以 提供安排工作的工具(用.NET开发的类)。这是正确的选择还是将来有任何影响?

  2. 是否真的需要开发代码或任何其他编码方式的工作来解决这个问题?

1 个答案:

答案 0 :(得分:0)

我对Quartz.net不是很熟悉,但我确实知道尝试在与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进程运行的位置:假设无论如何都在IIS上进行托管),因此无法保证进程在运行时能够正确完成。

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

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

此设置通常涉及另一个应用程序(对我来说,通常是在服务器上运行的控制台应用程序),它从消息队列接收命令消息并在其自己的进程中运行,完全独立于MVC,因此IIS AppPools固有的问题和后台任务。

很多工作,真的......人们会认为它会更容易,但这是实现它的必然方法,并保持要运行的任务的完整性。