ASP.NET UpdatePanel超时问题

59

我从一个 UpdatePanel 发送请求,但需要超过90秒才能完成。我遇到了这个超时错误:

Microsoft JScript运行时错误: Sys.WebForms.PageRequestManagerTimeoutException: 服务器请求已超时。

有没有人知道如何增加调用超时前等待的时间?

7个回答

94

在ScriptManager中有一个属性可以设置超时时间(以秒为单位),默认值为90秒。

AsyncPostBackTimeout="300"

3
应该将这个添加到哪里?服务器端还是客户端?如有进一步的解释,将不胜感激。 - owen gerig
通过将AsynchPostBackTimeout设置为“180”,将允许的超时时间加倍,这对我的解决方案非常有效。 - landsteven
@owengerig,你的ScriptManager应该添加这个属性。 - ihebiheb
@owengerig:这是ScriptManager的一个属性,因此它可以在客户端添加,但如果您想要动态设置,也可以使用ScriptManager的ID从服务器端访问它,例如sc1.AsyncPostBackTimeout = "300"。 - Mitesh Vora

49

在我的情况下,ScriptManager对象是在主页文件中创建的,然后与内容页文件共享。因此,要在内容页中更改ScriptManager.AsyncPostBackTimeout属性,我必须在内容页的aspx.cs文件中访问该对象:

protected void Page_Load(object sender, EventArgs e)
{
     . . . 
     ScriptManager _scriptMan = ScriptManager.GetCurrent(this);
     _scriptMan.AsyncPostBackTimeout = 36000;
}

1
嗨@narayan,这对RadScriptManager也适用吗? - Nagib Mahfuz
@NagibMahfuz,很遗憾我没有尝试过RadScriptManager,所以我不能给出明确的答案。如果你自己尝试过,请告诉我们它的效果如何。 - narayan

11

这个方法奏效了(基本上就是忽略所有超时):

<script type="text/javascript"> 
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function (sender, args) { 
            if (args.get_error() && args.get_error().name === 'Sys.WebForms.PageRequestManagerTimeoutException') { 
                            args.set_errorHandled(true); 
            } 
        }); 
    </script> 

我在上面的代码中遇到了错误。ReferenceError: Sys未定义 - Musakkhir Sayyed

9
请按照以下步骤操作:
第一步:在 web.config 文件中设置 httpRuntime maxRequestLength="1024000" executionTimeout="999999" 第二步:将以下设置添加到您的网页 ScriptManager 中:AsyncPostBackTimeout ="360000" 这样就解决了您的问题。

2

如果需要更改IIS中的ASP脚本超时时间,这是可以进行配置的。

具体位置在您的网站、虚拟目录、配置按钮中,然后在选项标签页上。

或者通过设置Server.ScriptTimeout属性来实现。


Server.ScriptTimeout 是针对普通脚本还是异步脚本的? - Barbaros Alp
普通脚本,非异步脚本。 - Bravax

1

如果你只是想让请求被丢弃,有可能永远不会完全执行,那么这个方法也可以。

在ScriptManager标签中添加AsyncPostBackTimeOut属性,将默认超时时间从90秒更改为适合你的应用程序的更合理的时间。

此外,进一步研究如何加快接收调用的Web服务。在互联网时间中,90秒几乎等于无限。


1
您面临的问题是应用程序在SQL数据库查询超时时遇到的问题。它花费的时间比默认值更长才能返回输出结果。因此,您需要增加ConnectionTimeout属性。
您可以通过以下几种方式实现:
  1. 连接字符串有一个 ConnectionTimeout 属性。它是一个属性,用于确定您的代码等待打开数据库连接的最长时间(以秒为单位)。您可以在 web.config 中的连接字符串部分设置连接超时。

    <connectionstrings>
        <add name="ConnectionString" 
             connectionstring="Database=UKTST1;Server=BRESAWN;uid="      system.data.sqlclient="/><br mode=" hold=" /><br mode=" html="> <asp:ToolkitScriptManager runat=" server=" AsyncPostBackTimeOut=" 6000="><br mode=">
        </add>
    </connectionstrings>
    
  2. 您可以在 .aspx 页面中添加 AsyncPostBackTimeout="6000"

    <asp:ToolkitScriptManager runat="server" AsyncPostBackTimeOut="6000">
    </asp:ToolkitScriptManager>
    
  3. 您可以在 .cs 文件中调用存储过程时,在 SqlCommand 中设置超时。

    command.CommandTimeout = 30*1000;
    

希望你有解决方案!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接