2012-05-02 35 views
0

我有一个复杂的操作,需要很长时间才能运行。查看未呈现长时间请求,但控制器代码已执行

如果它针对一小部分数据运行,它将完美工作,并生成所需的页面。

如果我使用大量数据并且处理时间超过几分钟,该页面仍然显示为在客户端计算机上请求,但我们知道(通过堆栈跟踪)我是正确的“返回查看(模型);”。

任何想法,为什么会发生这种情况?我完全丧失了。我已经将每次超时延长到几个小时(包括任何可用于应用程序池的时间)。

这不能成为一个浏览器问题,因为它已经在Chrome,IE,Safari和Firefox中的几个不同的Windows PC上尝试过。

编辑

这发生在多个地方在完全不同的事情都发生在应用程序。但是所有代码都是为两者执行的。

+0

OutOfMmeory excepetion由于过大的结果?或者你是否在服务器端看到任何异常? (即调试并关闭“仅限我的代码”,并在抛出CLR异常时关闭异常 - >中断)。 –

+0

没有任何异常:( – rashleighp

+0

浏览器中没有错误(ie..404 ...或500错误)?你只是回答了这个问题忽略。 – twaldron

回答

2

在调用View(model)之前,您的模型是否实际上具有所有预期的数据?

如果在任何IQuerable或IEnumerable属性上调用ToList(),它是否会返回预期的数据?

你将不得不张贴更多的代码去进一步。


编辑:

仍然没有足够的信息去,但这里有一些更多的调试技巧。

你的路径是浏览器 - > Web服务器 - >数据库

如果你确信你调用视图(模型),所有的数据都在模型对象被物化之前,那么你可以假设问题不在于webserver - >数据库连接。

因此,如果这个问题是浏览器之间 - > Web服务器,这里有一对夫妇更多的可能性:

  • 你提一个大企业的系统:是否有任何涉及代理?你可以用直接连接进行测试吗?

  • 有什么东西被返回到浏览器呢?你能telnet到Web服务器的80端口并发出请求吗?你有什么回来吗?

  • 如果你监视浏览器进程,它是否在做什么?使用procexp,你可以看到每个线程正在做什么 - 浏览器空闲,还是使用CPU &吞噬内存?

  • 是否有任何其他进程可能拦截请求?某些防病毒产品可能会阻止某些页面呈现。你能禁用防病毒并查看是否有任何改变?

  • 你有没有试过监视服务器,看看发生了什么?处理是否正在发生(大概内存使用量也会增加)?

+0

+1。一步,它可能是一个好主意,只是'返回新的EmptyResult();'看看是否有帮助 - 可以缩小问题 –

+0

一切都正确返回。它不是一个代码问题,因为它发生在两个不同的p只有当请求需要很长时间时(如果请求需要几分钟或更少的时间,它可以正常工作),就会发生代码非常不同的花边。我已经花了3天的时间寻找代码问题,并且确定没有代码问题。 – rashleighp

+0

谢谢,你的建议真的有帮助。最后,我们把它移到了https(无论如何我们会这样做),并通过不同的端口,它工作正常! – rashleighp

0

IIS有一个处理超时。一旦达到,无论处理管道处于哪个阶段,处理线程都会被终止。尝试增加web.config中指定的处理超时时间:

<httpRuntime executionTimeout="90" /> 

有关更多详细信息,请参阅MSDN。请注意,此限制适用于所有页面,因此如果沿着此路线走,请小心。

+0

你的意思是空闲timout?我不能在IIS帮助或网页上找到对处理超时的任何其他引用,如果是这样,它已经设置为2小时(问题发生在8分钟后) – rashleighp

+0

已设置为14400(4小时) – rashleighp

1

你可能会完全考虑了不同的设计:

  1. 客户端提交作业服务器
  2. 服务器启动长时间运行的操作的后台处理
  3. Server返回作业ID客户
  4. 客户端使用工作id来定期查询服务器的作业状态
  5. 作业完成后,客户端将结果以HTML或数据(例如JSON)的形式请求红。
+0

我想同意这是一个好主意,我们已经谈到了做类似的事情,但这是一个大型的实时企业系统,所以它需要大量的时间和工作(并且我们处于危机模式下) – rashleighp

0

虽然我还没有看到你的代码,我的猜测是尝试使用异步控制器(有或没有,通过AJAX :-)所取得的请求,因为,很明显,是一个长期运行任务或许你还可以优化处理一些并行处理,以减少时间: 这里是一个很好的起点 http://msdn.microsoft.com/en-us/library/ee728598.aspx

相关问题