MVC3 Razor IIS 7后台进程超时

时间:2012-10-11 17:13:35

标签: c# iis razor timeout

我有一个MVC3剃刀页面基本上就是这个

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

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

1 个答案:

答案 0 :(得分:3)

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服务从该队列中读取工作项并处理它们。