Sys.WebForms.PageRequestManagerServerErrorException 12031.出于想法

时间:2011-02-28 13:31:06

标签: asp.net ajax exception

在最近的一个项目中,我们目前收到12031错误。这是完整的错误:

  

Sys.WebForms.PageRequestManagerServerErrorException 12031   从中返回的状态代码   服务器是12031

问题是,这不会一直发生,我们无法在开发环境中重现错误。

我们在我们的应用程序中使用AJAX,偶尔会在每个页面上发生此异常。

我在SO上发现了一个有相同问题的帖子,并尝试将maxRequestLength更改为“1”以查看我是否经常遇到相同的错误,但我没有。相反,我正在

Maximum request length exceeded. 

所以我开始认为它与maxRequestLength无关。我实际上是出于想法。我的ScriptManagerMasterPage中有一个AsyncPostBackTimeout="240"。这是相同的时间(给予或采取)。 3,5分钟“无”之后我得到12031错误。我正在记录其中一个页面并通过记录,我的意思是记录页面的每个部分,如“调用Page_Load”,“调用xyz”等,我在页面上有15个点。用户单击按钮并且ScriptManager尝试执行其工作后,不会发生回发,也不会发生日志记录。这就像页面想要回发但是太旧而无法做到。尝试约3.5分钟并因给定错误而失败。

如果您有任何想法,请帮助我。

谢谢

3 个答案:

答案 0 :(得分:2)

该错误几乎肯定与响应的大小,AsyncPostBackTimeout或maxRequestLength无关。

连接重置通常表示网络连接不良或服务器已加载到其容量限制。你可以尝试一些事情:

  1. 在知道自助服务终端收到错误的时间内检查Windows事件日志。查找任何相关的错误或警告。
  2. 如果可行,请让自助服务终端工作人员使用Pingtest之类的内容来测试他们在您的应用中收到错误时本地网络连接的质量。
  3. 使用Pingdom之类的服务来确保服务器本身不会间歇性地失去连接。

答案 1 :(得分:0)

此错误可能是由于maxRequestLength的HTTP运行时限制造成的。默认值为4096。

 Try adding (or editing) the following entry in your Web.Config: 
"<httpRuntime maxRequestLength="8192"  />" (effectively allowing 8mb of data transmission, instead of the default 4mb). 

请不要....您可以根据最大请求设置数据。 8192不是限制。您还需要添加Page.Form.Attributes.Add(“enctype”,“multipart / form-data”);在页面的Page_Load事件中。

您需要在System.Web配置部分输入此内容。

如何避免收到PageRequestManagerParserErrorException?

首先,不要从前面的列表中做任何事情!这是一个如何避免给定错误的匹配列表(如果可能): 调用Response.Write(): 在页面上放置一个或类似的控件并设置其Text属性。额外的好处是您的页面将是有效的HTML。使用Response.Write()时,通常会得到包含无效标记的页面。

响应过滤器: 修复可能只是不使用过滤器。无论如何,它们并不经常使用。如果可能,请在控制级别而非响应级别过滤事物。

HttpModules:与响应过滤器相同。

启用服务器跟踪: 使用其他形式的跟踪,例如写入日志文件,Windows事件日志或自定义机制。 调用Server.Transfer(): 我不确定为什么人们会使用Server.Transfer()。也许这是Classic ASP的遗产。我建议使用带有查询字符串参数或跨页面发布的Response.Redirect()。

避免解析错误的另一种方法是进行常规回发而不是异步回发。例如,如果您有一个绝对必须执行Server.Transfer()的按钮,请使其定期进行回发。有很多方法可以做到这一点: 最简单的方法是将按钮放在任何UpdatePanel之外。遗憾的是,您的页面布局可能不允许这样做。 将PostBackTrigger添加到指向按钮的UpdatePanel。如果通过页面上的标记静态声明按钮,则此方法很有用。 调用ScriptManager.RegisterPostBackControl()并传入相关按钮。这是动态添加的控件的最佳解决方案,例如重复模板中的控件。

祝你好运!

答案 2 :(得分:0)

我们在a Barracuda Device坐在我们网站前面时收到此错误。这是一个最大请求长度问题,因为Barracuda可以防止请求大小过载。我们暂时删除了设备并解决了问题。不确定这是不是你的问题。