【发布时间】:2017-07-06 06:50:17
【问题描述】:
我有一个 C# MVC 应用程序。我知道其中一个电话需要大约 12 小时,我正在生成一些报告。
我想知道 IIS 是否会保持进程运行这么长时间。 如果我异步执行它,它会运行并以某种方式将其收起来并让他运行这么长时间吗?
【问题讨论】:
-
看看 Hangfire (hangfire.io)。这正是您想要的。
标签: c# asp.net-mvc-4 iis
我有一个 C# MVC 应用程序。我知道其中一个电话需要大约 12 小时,我正在生成一些报告。
我想知道 IIS 是否会保持进程运行这么长时间。 如果我异步执行它,它会运行并以某种方式将其收起来并让他运行这么长时间吗?
【问题讨论】:
标签: c# asp.net-mvc-4 iis
一般来说,这是一种非常糟糕的做法。您的应用程序池可能由于您无法控制的许多原因而被回收。 在外部进程中处理此问题,然后通过 IIS 向用户提供结果,您将受益匪浅。
但是,从 .net 4.5.2 (https://blogs.msdn.microsoft.com/dotnet/2014/05/05/announcing-the-net-framework-4-5-2/) 开始,您可以使用 HostingEnvironment.QueueBackgroundWorkItem API。
这背后的想法是 IIS 将尝试在应用程序池正常关闭的情况下完成这项工作。
【讨论】:
我假设报告必须使用 SSRS 之类的东西。为什么不在后端创建批处理作业以在指定时间运行报告。用报告的状态更新一个表格,然后在前端轮询状态。准备好时只需下载它。想象一下,如果您的报告已经运行了 6 个小时并且它依赖于正在运行的网站。如果有人重新启动网站,那么 6 小时的处理时间就过去了。
【讨论】: