【问题标题】:How to increase executionTimeout for a long-running query?如何为长时间运行的查询增加 executionTimeout?
【发布时间】:2012-05-18 09:14:19
【问题描述】:

在我的应用程序中,执行一个查询需要 3 分钟。我发现 默认 ExecutionTimeout 值为 110 秒。我尝试将其更改为 500(秒),但它并没有解决我的问题。在某处我发现设置 <compilation debug="false"> 允许配置 ExecutionTimeout 属性。但是,即使这样也没有解决我的问题。

有谁知道如何增加长时间运行的查询的执行超时?

【问题讨论】:

  • 请记住,如果您使用会话,则会阻止所有休息页面。
  • 这不适合你吗?

标签: c# asp.net


【解决方案1】:

.NET Framework 1.0 和 1.1 的执行超时为 90 秒,否则为 110 秒。

如果您需要更改默认设置,您需要在web.config 下的<httpRuntime> 中进行操作

<httpRuntime executionTimeout = "number(in seconds)"/>

但请记住:

此超时仅适用于编译元素中的调试属性为 False。

有详细看compilation Element

看看这个关于httpRuntime Element的文档

【讨论】:

  • web.config 文件的编译元素中的 debug="true" 时才应用超时值的提示非常好。
  • @EdGraham 你不是说“超时值仅在 debug=false 时应用”吗? huMpty duMpty 是说:这个超时仅适用于编译元素中的调试属性为 False
  • 在 azure web 应用程序中,可以将此值更改为不高于 240 秒。 :(
【解决方案2】:

您可以在web.config中设置executionTimeout以支持更长的执行时间。

executionTimeout 指定请求在被 ASP.NET 自动关闭之前允许执行的最大秒数。 MSDN

<httpRuntime  executionTimeout = "300" />

这会使执行超时五分钟

可选的 Int32 属性。

指定允许请求的最大秒数 在被 ASP.NET 自动关闭之前执行。

此超时仅适用于编译中的调试属性 元素为假。因此,如果调试属性为 True,则执行 不必将此属性设置为较大的值以避免 调试时关闭应用程序。默认为 110 秒,Reference

【讨论】:

  • @MonsterMMORPG 你可以使用这个代码:Page.Server.ScriptTimeout = 60
【解决方案3】:

重新。 “我们可以为单个页面设置这个值吗?” – MonsterMMORPG。

是的,您可以(并且通常应该)使用位置标签附上之前的答案。

例如

  ...
  <location path="YourWebpage.aspx">
    <system.web>
      <httpRuntime executionTimeout="300" maxRequestLength="29296" />
    </system.web>
  </location>
</configuration>

上面的 sn-p 取自我自己的工作 web.config 的末尾,我昨天测试过 - 它对我有用。

【讨论】:

  • 按照我的理解,我可以将一个小的 web.config 文件添加到我的特定页面所在的文件夹中,只有这个设置吗?我相信 web.configs 过载,因此本地页面文件夹中的 web.config 会覆盖根目录下的 web.config 设置,并且仅使特定页面更宽容?
  • 史蒂夫,我认为您写的内容是正确的,但对我来说,包含我的 .aspx 页面的文件夹中有一个现有的 web.config,我刚刚更新了它。请注意,位置标签已经提供了将此设置限制为仅一个指定的 .aspx 页面(在所示示例中为“YourWebpage.aspx”)的功能——我在同一个文件夹中有其他 .aspx 页面用于此设置不适用。
  • 这很有帮助。请记住将 httpRuntime 放在任何授权元素之外,否则您会收到错误消息。问我怎么知道的。
【解决方案4】:

要在每页级别设置超时,您可以使用以下简单代码:

Page.Server.ScriptTimeout = 60;

注意:60 表示 60 秒,此超时仅适用于编译元素中的调试属性为 False 的情况。

【讨论】:

    【解决方案5】:

    当查询需要这么长时间时,我建议异步运行它并在完成时使用回调函数。

    我对 ASP.NET 没有太多经验,但也许您可以将 AJAX 用于这种异步行为。

    通常,网页应该在几秒钟内加载,而不是几分钟。不要让您的用户等待这么久!

    【讨论】:

    • executiontimeout 适用于任何请求、同步或异步...因此 AJAX 请求将受到相同的时间限制
    【解决方案6】:

    就我而言,我需要让我的 wcf 运行超过 2 小时。设置,根本没有工作。 wcf 的执行时间可能不超过 20~30 分钟。所以我在 IIS 管理器中更改了应用程序池的空闲超时设置,然后它就起作用了!在 IIS 管理器中,选择您的应用程序池并右键单击它并选择高级设置,然后将空闲超时设置更改为您想要的任何分钟。所以,我认为设置 web.config 和设置应用程序池都是需要的。

    【讨论】:

    • 可能是你没有设置正确,或者修改后没有回收你的应用池。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    相关资源
    最近更新 更多