超出响应缓冲区限制

时间:2011-02-11 10:36:05

标签: asp-classic buffering

我正在运行一个简单的查询来从我的数据库中获取数据&显示它们。我收到的错误是Response Buffer Limit Exceeded

  

错误是:响应对象错误'ASP 0251:80004005'
  超出响应缓冲区限制
  /abc/test_maintenanceDetail.asp,第0行   执行ASP页导致响应缓冲区超出其配置的限制。

我还在循环中尝试了Response.flush,并在页面顶部使用response.buffer = false,但我仍然无法获取任何数据。

我的数据库包含5600条记录,请给我一些步骤或代码来解决问题。

12 个答案:

答案 0 :(得分:47)

我知道这已经晚了,但对于遇到此问题的其他人:如果您使用某种循环(在我的情况下,Do-While)来显示数据,请确保您要移动到下一条记录(在我的例子中,是一个rs.MoveNext)。

答案 1 :(得分:42)

微软的支持说这个

http://support.microsoft.com/kb/925764

但在GUI上更容易:

  • 在服务器管理器中单击ASP。
  • 将缓冲区限制4mb更改为64mb。
  • 申请并重新开始。

答案 2 :(得分:25)

发生这种情况的原因是默认情况下启用了缓冲,IIS 6无法处理大响应。

在经典ASP中,在页面顶部,<%@Language="VBScript"%>添加后: <%Response.Buffer = False%>

在ASP.NET中,您可以将Buffer="False"添加到Page指令中。 例如: <%@Page Language="C#" Buffer="False"%>

答案 3 :(得分:8)

我遇到了同样的问题,我的 IIS版本是8.5 Response Buffering LimitASP -> Limit Properties的增加解决了问题。

  1. 在IIS 8.5中,选择您的项目,您可以在右侧看到选项。在IIS下,您可以看到ASP选项。
  2. ASP option

    1. 在选项窗口中将Response Buffering Limit增加到40194304(约40 MB)。
    2. Increase buffer limit

      1. 远离该选项,在右侧顶部,您可以看到操作菜单,选择应用。它解决了我的问题。
      2. Apply settings

答案 4 :(得分:5)

如果不允许在服务器级别更改缓冲区限制,则需要使用&lt;%Response.Buffer = False%&gt;方法

但是,如果您仍然收到此错误并且页面上有一个大表,那么罪魁祸首可能就是表本身。根据设计,某些版本的Internet Explorer会在呈现到页面之前缓冲整个内容。因此,即使您告诉页面不缓冲内容,表元素也可能被缓冲并导致此错误。

一些替代解决方案可能是对表结果进行分页,但是如果必须显示整个表并且它有数千行,则在表生成循环的中间抛出这行代码:&lt;%Response.Flush%取代。出于速度考虑,您可能还需要考虑添加一个基本计数器,以便仅每25或100行左右进行一次刷新。

不缓冲输出的缺点:

  1. 整体页面加载速度减慢
  2. 表和列将在填充内容时调整其宽度(表格显示为摆动)
  3. 用户可以在完全加载之前单击链接并与页面进行交互。因此,如果页面底部有一些javascript,您可能需要将其移到顶部以确保在某些快速移动的用户点击之前加载它。
  4. 有关详细信息,请参阅此知识库文章http://support.microsoft.com/kb/925764

    希望有所帮助。

答案 5 :(得分:5)

非常感谢你! &lt;%Response.Buffer = False%&gt; 就像魅力一样! 我的asp / HTML表格返回了大约2700条记录的空白页面。以下调试行有助于揭示缓冲问题:我按如下方式替换Do While循环,并使用我的限制数字来查看发生的情况:

替换

请勿rs.EOF

&#39; etc ....您编写表格行的代码块

rs.moveNext

循环

Do Reccount&lt; 2500

如果rs.EOF则重新计数= 2501

&#39; etc ....您编写表格行的代码块

rs.moveNext

循环

response.write&#34; recount =&#34; &安培;验票

升高或降低2500和2501以查看它是否是缓冲区问题。对于我的记录集,我可以看到空白页返回,空白表,发生在大约2700条记录,祝大家好运,再次感谢您解决此问题!这么简单的大解决方案!

答案 6 :(得分:3)

您可以按如下方式增加限制:

  1. 停止IIS。
  2. 找到文件%WinDir%\ System32 \ Inetsrv \ Metabase.xml
  3. 修改AspBufferingLimit值。默认值为4194304,大约为4 MB。 将其更改为20MB(20971520)。
  4. 重新启动IIS。

答案 7 :(得分:1)

对同一错误消息的另一个答案(这只是解决了我的问题)是系统驱动器的磁盘空间不足。意味着700kb免费。删除这个非常旧的服务器上的大量未使用的东西,然后重新启动IIS和网站(可能只有IIS是必要的)导致问题消失了。

我确定其他答案对大多数人来说更有用,但为了快速解决问题,请确保系统驱动器有一些可用空间。

答案 8 :(得分:0)

我纠正了错误'ASP 0251:80004005'响应缓冲区限制如下:

要增加IIS 6中的缓冲限制,请按照下列步骤操作:

单击“开始”,单击“运行”,键入cmd,然后单击“确定”。 键入以下命令,然后按ENTER键: cd / d%systemdrive%\ inetpub \ adminscripts 键入以下命令,然后按ENTER键: cscript.exe adsutil.vbs SET w3svc / aspbufferinglimit LimitSize 注意LimitSize表示缓冲限制大小(以字节为单位)。例如,数字67108864将缓冲限制大小设置为64 MB。 要确认已正确设置缓冲区限制,请按照下列步骤操作:

单击“开始”,单击“运行”,键入cmd,然后单击“确定”。 键入以下命令,然后按ENTER键: cd / d%systemdrive%\ inetpub \ adminscripts 键入以下命令,然后按ENTER键: cscript.exe adsutil.vbs获取w3svc / aspbufferinglimit

指的是https://support.microsoft.com/en-us/kb/944886

答案 9 :(得分:0)

如果您正在寻找原因并且不想与系统设置作斗争,这些是我遇到的两个主要情况:

  1. 如果没有下一个 recorderdest.movenext
  2. ,您可能会遇到无限循环
  3. 您的文字数据非常大,但您认为不是!这种情况的常见原因是将Microsoft Word中的图像直接复制粘贴到编辑器中,因此服务器将图像转换为数据对象并将其保存在文本字段中。这很容易占用数据库资源,并在再次调用数据时导致缓冲区问题。

答案 10 :(得分:0)

就我而言,我只是在rs.Open .....

之前写了这一行

Response.flush

rs.Open查询,conn

答案 11 :(得分:0)

也可能归因于CursorTypeEnum。我的情况是初始值等于CursorTypeEnum.adOpenStatic 3。

更改为默认值CursorTypeEnum.adOpenForwardOnly 0后,它将恢复为正常。