响应缓冲区限制已超过

47

我正在运行一个简单的查询来获取数据库中的数据并显示它们。但是我遇到了一个错误,错误提示为响应缓冲区限制超出

错误信息:Response object error 'ASP 0251: 80004005'
Response Buffer Limit Exceeded
/abc/test_maintenanceDetail.asp, line 0
执行该 ASP 页面导致响应缓冲区超出其配置限制。

我在循环中尝试使用Response.flush,并在页面顶部使用response.buffer = false,但是仍然没有得到任何数据。

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

12个回答

59

我知道现在已经很晚了,但是对于遇到这个问题的其他人:如果你正在使用某种循环方式(在我这里是Do-While)来显示数据,请确保你正在切换到下一条记录(在我这里是rs.MoveNext)。


就是这么简单。 - Matt Dell
刚刚救了我!谢谢! - dipi evil
我几个月前(可能是4、5个月甚至更久之前)就对这个帖子进行了点赞。我不能再次点赞,但我需要再次评论这个答案如何解决了我的问题。 - Sergio Rosas
天啊,你刚刚结束了我一周的asp/.net地狱。我不在乎会受到多少反感,你应该得到宇宙中最多的感谢和加1。 - Chris Wood

53

4
对我有用。67108864是这个数字。此外,还增加了脚本超时时间。 - live-love

35

这种情况发生的原因是默认开启了缓存,而IIS 6无法处理大型响应。

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

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


当我关闭它时,会出现 ASP 0159 必须开启缓冲 - dakab
@dakab - 确保将其放置在页面顶部。我因为将其放在<HTML>部分内而遇到了相同的错误。 - Mick

11

我遇到了同样的问题,我的 IIS 版本是 8.5。在 ASP -> Limit Properties 下增加了 Response Buffering Limit 的值后,问题得以解决。

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

ASP option

  1. 在选项窗口中将 Response Buffering Limit 增加至 40194304(约为 40 MB)。

Increase buffer limit

  1. 离开选项页面,在右上角可以看到 操作 菜单,选择 应用。这解决了我的问题。

Apply settings


9
如果您无法在服务器级别更改缓冲区限制,则需要使用“<%Response.Buffer = False%>”方法。
但是,如果您仍然遇到此错误并且页面上有一个大型表格,则罪魁祸首可能是表格本身。按设计,在某些版本的 Internet Explorer 中,将渲染到页面前<table>和</table>之间的所有内容都被缓冲。因此,即使您告诉页面不要缓冲内容,表格元素也可能被缓冲并导致此错误。
一些替代方案可能是对表格结果进行分页,但是如果您必须显示整个具有数千行的表格,并在生成循环的中间插入此行代码:<% Response.Flush %>。出于速度考虑,您还可以考虑添加基本计数器,以便刷新每25行或100行左右。
不缓冲输出的缺点:
  1. 整个页面加载速度变慢
  2. 表格和列将根据填充内容调整其宽度(表格看起来会抖动)
  3. 用户将能够在页面完全加载之前单击链接并与页面交互。因此,如果页面底部有一些 javascript,则可能要将其移动到顶部,以确保一些更快的用户单击某些东西之前已加载它们。
有关更多信息,请参见此 KB 文章http://support.microsoft.com/kb/925764
希望这有所帮助。

5
非常感谢! "<%Response.Buffer = False%>" 解决了问题! 我的asp / HTML表在大约2700条记录时返回空白页面。 下面的调试行帮助暴露缓冲问题:我将Do While循环替换为以下内容,并尝试我的限制数字以查看发生了什么: 替换 Do While not rs.EOF 'etc .... 您编写的写入表行的代码块 rs.moveNext
Loop 使用 Do While reccount < 2500
if rs.EOF then recount = 2501 'etc .... 您编写的写入表行的代码块 rs.moveNext
Loop response.write "recount = " & recount 提高或降低2500和2501,以查看是否存在缓冲问题。 对于我的记录集,我可以看到在大约2700条记录处返回空白页面,祝大家好运,并再次感谢您解决这个问题! 这是一个简单而伟大的解决方案!

3
您可以按照以下方式增加限制:
  1. 停止IIS。
  2. 定位文件%WinDir%\System32\Inetsrv\Metabase.xml。
  3. 修改AspBufferingLimit值。默认值为4194304,约为4 MB。将其更改为20 MB(20971520)。
  4. 重新启动IIS。

1

对于相同的错误信息,另一个解决方法(这个方法解决了我的问题)是系统驱动器的磁盘空间不足,只剩下大约700kb的空间。在这台非常老旧的服务器上删除了很多未使用的东西,然后重新启动了IIS和网站(可能只需要重新启动IIS),这样问题就消失了。

我相信其他答案对大多数人更有用,但是对于快速修复,只需确保系统驱动器有一些可用空间。


0
如果你正在寻找原因并且不想与系统设置对抗,那么这里有两个我遇到的主要情况:
  1. 你可能会出现无限循环,但没有使用 nextrecordest.movenext
  2. 你的文本数据非常大,但你认为它不是!这种情况的普遍原因是直接从 Microsoft Word 复制粘贴图像到编辑器中,因此服务器将图像转换为数据对象并保存在你的文本字段中。这可能会占用数据库资源并在再次调用数据时导致缓冲问题。

0
在我的情况下,我只是在 rs.Open 前写了这一行……

Response.flush

rs.Open 查询, conn


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