0

我有一个复杂的动作,可能需要很长时间才能运行。

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

如果我处理大量数据并且处理时间超过几分钟,则页面似乎仍在客户端计算机上被请求,但我们知道(通过堆栈跟踪)我正准备“返回 View(模型);”。

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

这不可能是浏览器问题,因为它已在 Chrome、IE、Safari 和 Firefox 的几个不同 Windows 电脑上进行了尝试。

编辑

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

4

4 回答 4

2

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

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

您必须发布更多代码才能更进一步。


编辑:

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

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

如果您确定在调用 View(model) 之前所有数据都已在模型对象中具体化,那么您可以假设问题不在网络服务器 -> 数据库连接中。

因此,如果问题出在浏览器 - > Web 服务器之间,这里还有更多可能性:

  • 您提到了一个大型企业系统:是否涉及任何代理?可以直接连接测试吗?

  • 是否有任何内容返回到浏览器?您可以远程登录到 Web 服务器的 80 端口并发出请求吗?你有什么要回来的吗?

  • 如果您监视浏览器进程,它是否在做任何事情?使用 procexp,您可以看到每个线程在做什么 - 浏览器是空闲的,还是在使用 CPU 并占用内存?

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

  • 您是否尝试过监视服务器以查看发生了什么?处理是否正在发生(并且可能内存使用量也会增加)?

于 2012-05-02T16:42:18.137 回答
1

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

  1. 客户端向服务器提交作业
  2. 服务器启动长时间运行操作的后台处理
  3. 服务器返回作业 ID 给客户端
  4. 客户端使用job id定期向服务器查询job状态
  5. 作业完成后,客户端以 HTML 或数据(例如 JSON)的形式请求结果,然后呈现。
于 2012-05-02T16:41:49.923 回答
0

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

<httpRuntime executionTimeout="90"  />

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

于 2012-05-02T16:39:24.557 回答
0

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

于 2012-05-02T18:51:40.833 回答