【问题标题】:ASP.NET code execution halts after certain time on IIS在 IIS 上一段时间后,ASP.NET 代码执行停止
【发布时间】:2017-03-20 07:11:03
【问题描述】:

我的应用程序有一个长时间运行的任务,大约需要 4/5 小时才能完成。该任务通过循环迭代从 CUBE 数据服务器检索数百种组合的数据。

当我从本地 Visual Studio 2015 运行它时它运行良好,但是当我将它部署到我们的应用程序服务器上时,此过程会在 25/30 分钟后自动停止。当我从 CUBE 服务器进行监控时,我可以看到 25/30 分钟后,那里没有接收到数据呼叫。

我在 web.config 中尝试了以下操作,并将会话超时设置为 20 小时,从 IIS 开始,但由于数据调用在特定时间后停止并且没有完全完成,所以没有任何效果。

executionTimeout="86400"

代码如下-

Task.Factory.StartNew(() => RunManufacturerModuleCache(), TaskCreationOptions.LongRunning);

其中 RunManufacturerModuleCache() 方法有一个 1000 次迭代的 for 循环,每次迭代都从 CUBE 服务器获取数据。

是否有任何设置可以延长我在 IIS 中的执行时间,或者无法在 IIS 中运行超过 25/30 分钟的执行过程?谢谢!

【问题讨论】:

    标签: c# asp.net iis


    【解决方案1】:

    IIS 有一个应用程序池空闲超时(默认为 20 分钟)。只需转到 IIS 中的应用程序池,右键单击您的应用程序池和“高级设置”。您将看到有一个名为“空闲超时(分钟)”的设置。如果您不希望您的应用程序池在长时间未收到请求时自动关闭,请将其设置为 0。

    或者,您可以每隔几分钟继续向应用程序主页(或任何简单页面)发送请求,以保持应用程序池处于唤醒状态。

    附言。 就最佳实践而言,您不应将长时间运行的任务放在请求处理管道中。相反,您应该创建一个单独的服务(Windows 服务、Azure WebJob 等)来执行长时间运行的任务,但这是一个单独的讨论。

    【讨论】:

    • 谢谢,您的第一个解决方案,即将 0 设置为空闲超时(分钟)对我有用!
    最近更新 更多