我有一个复杂的动作,可能需要很长时间才能运行。
如果针对一小部分数据运行它,它就能完美运行并生成所需的页面。
如果我处理大量数据并且处理时间超过几分钟,则客户端计算机上仍然会显示该页面,但我们知道(通过堆栈跟踪)我是否正确“ return View(model);“。
为什么会发生这种情况的任何想法?我完全失去了。我已经将每个超时延长到几个小时(包括适用于应用程序池的任何超时)。
这不是一个浏览器问题,因为它已经在Chrome,IE,Safari和Firefox中的几个不同的Windows PC上尝试过。
修改
这发生在应用程序的多个地方,完全不同的事情正在发生。但是所有代码都是为两者执行的。
答案 0 :(得分:2)
在您调用View(模型)之前,您的模型实际上是否具有所有预期数据?
如果在任何IQuerable或IEnumerable属性上调用ToList(),它是否会返回预期的数据?
你必须发布更多代码才能继续下去。
编辑:
仍然没有足够的信息继续下去,但这里有一些调试技巧。
您的路径是浏览器 - >网络服务器 - >数据库
如果您确定在调用View(模型)之前所有数据都已在模型对象中实现,那么您可以假设问题不在Web服务器中 - >数据库连接。
因此,如果问题出在浏览器之间 - >网络服务器,这里有几个可能性:
你提到了一个大型企业系统:是否涉及任何代理?你可以通过直接连接进行测试吗?
是否有任何内容返回浏览器?你可以telnet到Web服务器的端口80并发出请求吗?你有什么回报吗?
如果您监控浏览器进程,它是否正在执行任何操作?使用procexp,您可以看到每个线程正在做什么 - 浏览器是空闲的,还是使用CPU&吞噬记忆?
是否有其他进程可能拦截请求?某些防病毒产品可能会阻止某些页面呈现。您是否可以禁用防病毒软件并查看是否有任何更改?
您是否尝试过监控服务器以查看发生了什么?处理是否正在发生(并且可能是内存使用量也会增加)?
答案 1 :(得分:1)
您可以完全考虑不同的设计:
答案 2 :(得分:0)
IIS处理超时。一旦达到该目的,无论请求在处理流水线的哪个阶段,都终止处理线程。尝试增加web.config中指定的处理超时:
<httpRuntime executionTimeout="90" />
有关详细信息,请参阅MSDN。请注意,此限制适用于所有页面,因此如果沿着这条路线行驶,请务必小心。
答案 3 :(得分:0)
虽然我还没有看到你的代码,但我的猜测是尝试使用异步控制器(有或没有,通过ajax :-)发出请求,因为很明显,这是一个长期运行的任务,也许你可以还通过一些并行处理来优化处理以减少时间: 这是一个很好的起点 http://msdn.microsoft.com/en-us/library/ee728598.aspx