我正在构建一个 asp.net mvc 应用程序。在我的应用程序中,我有一个仪表板,允许运行几个繁重的操作。我还有另一个运行不同轮询请求的 jquery 方法,试图从服务器获取操作的状态。
由于某种原因,控制器中的状态操作不断超时。只有当整个繁重的操作完成后,状态动作才会返回值。我尝试添加一些跟踪,似乎服务器确实处理了请求,但由于某种原因没有做出有效的响应。
可能是什么原因造成的?
我正在构建一个 asp.net mvc 应用程序。在我的应用程序中,我有一个仪表板,允许运行几个繁重的操作。我还有另一个运行不同轮询请求的 jquery 方法,试图从服务器获取操作的状态。
由于某种原因,控制器中的状态操作不断超时。只有当整个繁重的操作完成后,状态动作才会返回值。我尝试添加一些跟踪,似乎服务器确实处理了请求,但由于某种原因没有做出有效的响应。
可能是什么原因造成的?
ASP.NET 中的默认执行超时为 110 秒。这由以下元素控制:
<httpRuntime executionTimeout="110" />
如果您的操作花费的时间超过此默认超时,ASP.NET 将简单地将其关闭。您可以尝试增加默认值,但请记住,在 ASP.NET 中长时间运行的操作可能是灾难性的,因为在执行此操作期间会危及宝贵的工作线程,从而降低 ASP.NET 应用程序的服务能力。
此外,如果您在此操作中执行 SQL 查询,请记住,如果您有一些冗长的查询,您可能会遇到与 SqlConnection 和 SqlCommand 相关的其他超时。
您应该注意的另一件事是 ASP.NET 会话不是线程安全的。这意味着如果您对同一个 ASP.NET 会话有 2 个并行请求,它们将被序列化并按顺序执行,而不是并行执行。这是设计使然。因此,如果您在操作中使用会话,那么如果您有一个当前正在运行并使用会话的控制器操作,那么来自同一会话的另一个请求将必须等待它完成才能执行,这是完全正常的。