0

我对在 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/

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

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

4

2 回答 2

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

于 2015-09-08T19:47:50.470 回答
1

如果您在 IIS 中运行 Quartz.Net,那么您将遇到 IIS 定期终止应用程序的相同问题。当他们提到使用 Quartz.Net 时,他们的意思是您将 Quartz.Net 安装为 Windows 服务。然后,您的应用程序与在服务内运行的 Quartz.Net 服务器对话,并安排作业在其上运行。然后服务器/服务为您运行作业,您不会遇到在 IIS 内运行的问题,因为您的作业正在服务内运行。

没有可以作为 Windows 服务安装的 Quartz.Net nuget 服务器包。为此,您必须下载源代码并自行构建或从 SourceForge 下载二进制文件。Quartz.Net nuget 包用于将作业从 Web 应用程序调度到 Quartz.Net 服务器。

于 2015-09-09T03:11:44.130 回答