【问题标题】:asp.net mvc action keeps getting timeout because of another heavy operation由于另一个繁重的操作,asp.net mvc 操作不断超时
【发布时间】:2013-02-04 00:28:10
【问题描述】:

我正在构建一个 asp.net mvc 应用程序。 在我的应用程序中,我有一个仪表板,允许运行几个繁重的操作。 我还有另一个运行不同轮询请求的 jquery 方法,试图获取 来自服务器的操作状态。

由于某种原因,控制器中的状态操作不断超时。 只有当整个重操作完成后,状态动作才会返回 价值。我尝试添加一些跟踪,似乎服务器确实处理了请求 但由于某种原因,没有做出有效的回应。

可能是什么原因造成的?

【问题讨论】:

  • 你在使用会话吗?
  • 其实我用的是RuntimeCache
  • “繁重的操作”是在单独的线程中开始的吗?
  • 是的,它从另一个 ajax 请求开始,并使用新的 c# 异步并行机制运行

标签: jquery ajax asp.net-mvc


【解决方案1】:

ASP.NET 中的默认执行超时时间为 110 秒。这由以下元素控制:

<httpRuntime executionTimeout="110" />

如果您的操作花费的时间超过此默认超时时间,ASP.NET 将简单地将其关闭。您可以尝试增加默认值,但请记住,在 ASP.NET 中长时间运行操作可能是灾难性的,因为您在执行此操作期间会危及宝贵的工作线程,从而降低 ASP.NET 应用程序的服务能力。

此外,如果您在此操作中执行 SQL 查询,请记住,如果您有一些冗长的查询,您可能会遇到与 SqlConnection 和 SqlCommand 相关的其他超时。

您应该注意的另一件事是 ASP.NET 会话不是线程安全的。这意味着如果您对同一个 ASP.NET 会话有 2 个并行请求,它们将被序列化并按顺序执行,而不是并行执行。这是设计使然。因此,如果您在操作中使用会话,那么如果您有一个当前正在运行并使用会话的控制器操作,那么来自同一会话的另一个请求必须等待它完成才能执行,这是完全正常的。

【讨论】:

  • 我认为不是这个原因,繁重的操作运行良好,问题出在轮询请求上
  • 如果你使用的是Sessions,那是正常的。我将更新我的答案以包含此信息。
  • 不,缓存没有锁定。只有会话。你在使用会话吗?
  • 尝试将以下行放入您的 web.config 的 &lt;system.web&gt; 部分以确保是这种情况:&lt;sessionState mode="Off" /&gt;。但是,如果您真的没有使用会话,那么我没有更多线索为什么会发生这种情况。您可以尝试调试请求并查看它挂起的位置。
猜你喜欢
  • 1970-01-01
  • 2011-11-15
  • 1970-01-01
  • 2014-09-21
  • 2016-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多