用于在asp.net mvc Web应用程序中运行后台任务的工具

时间:2015-09-08 17:06:30

标签: asp.net asp.net-mvc iis quartz.net hangfire

我对执行背景&的正确设计决定感到困惑。 asp.net mvc web应用程序中长时间运行的任务。现在在这两个链接上: -

http://www.hanselman.com/blog/HowToRunBackgroundTasksInASPNET.aspx

&安培;

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

他们提到由于他们列出的原因(主要是因为IIS不是为运行这些类型的任务而设计)而在asp.net Web应用程序中运行后台任务和长时间运行的任务是有风险的。但与此同时,他们列出了一些可以安装在asp.net项目中的工具来运行后台工作,例如quartz.net,WebBackgrounder等。

所以我不确定这些工具是如何工作的?例如,如果我在我的asp.net mvc Web应用程序(使用nuget)中安装WebBackgrounder,并在IIS中部署我的asp.net mvc Web应用程序,那么这些工具中定义的作业也会在IIS下运行吗?或者它们将独立于托管Web应用程序的IIs运行?

2 个答案:

答案 0 :(得分:1)

它们将在IIS上运行,但在另一个线程中运行。你需要实现什么?也许你正试图在错误的地方解决问题。考虑使用消息队列将此任务与Web应用程序分离。然后,构造一个服务来使用队列中的消息并计算你需要的内容。

以下是使用azure服务总线和辅助角色的示例,但您可以在内部使用相同的想法:

http://www.asp.net/aspnet/overview/developing-apps-with-windows-azure/building-real-world-cloud-apps-with-windows-azure/queue-centric-work-pattern

答案 1 :(得分:1)

如果你在IIS中运行Quartz.Net,那么你将会遇到同样的IIS定期终止应用程序的问题。当他们提到使用Quartz.Net时他们所说的是你将Quartz.Net安装为Windows服务。然后,您的应用程序将与服务中运行的Quartz.Net服务器进行通信,并安排在其上运行的作业。然后服务器/服务为您运行作业,并且您没有在IIS内部运行的问题,因为您的作业在服务中运行。

没有可以作为Windows服务安装的Quartz.Net nuget服务器软件包。为此,您必须下载源代码并自行构建或download the binaries from SourceForge。您将使用Quartz.Net nuget包来安排从Web应用程序到Quartz.Net服务器的作业。