【问题标题】:MVC3 Razor IIS 7 background process timing outMVC3 Razor IIS 7 后台进程超时
【发布时间】:2012-10-02 10:28:29
【问题描述】:

我有一个 MVC3 剃须刀页面,基本上就是这样做的

[HttpPost]
public ActionResult Index(Mymodel model)
{
//run background process
return(model);
}
public backgroundprocesscompleted()
{
//write to database
}

运行后台进程部分通过库运行分析,然后在完成后运行 backgroundprocesscompleted。这整件事适用于小文件(46 行),但是当我在更大的文件(11k)上执行此操作时,它在 IIS 上运行并且似乎超时。我更改了许多设置,但仍然超时。本质上,我想做的是强制 Web 应用程序永不超时。关于如何解决这个问题的任何好主意?谢谢

【问题讨论】:

    标签: c# iis razor timeout


    【解决方案1】:

    在 ASP.Net 中运行较长时间的后台进程可能失败的原因有多种,包括

    • 与请求无关的线程中未处理的异常将导致进程停止。
    • 运行您的网站的 AppDomain 可能会因多种原因而关闭,并导致您的后台任务随之中断。
    • 修改 web.config 时,ASP.NET 会回收 AppDomain
    • IIS 自身每 29 小时循环一次整个 w3wp.exe 进程(默认情况下)
    • 在共享托管环境中,许多 Web 服务器配置为在一段时间不活动后关闭应用程序池

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

    上面链接的文章提供了一些降低这些风险的建议。但是,我建议完全在 ASP.Net 之外进行长时间运行的处理。一种直接的方法是将工作写入事务性 MSMQ 队列,并让 Windows 服务从该队列中读取工作项并进行处理。

    【讨论】:

    • WCF 也在 IIS 的上下文中运行(通常,除非您创建/使用不同的主机)并遇到相同的问题。
    猜你喜欢
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 2012-04-08
    相关资源
    最近更新 更多