超出响应缓冲区限制

Sam*_*ir 40 buffering asp-classic

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

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

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

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

小智 50

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


小智 43

微软的支持说这个

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

但在GUI上它更容易:

  • 在服务器管理器中单击ASP.
  • 将缓冲区限制为4mb到64mb.
  • 应用并重新启动.

  • 为我工作.67108864是数字.还增加了脚本超时. (3认同)

小智 28

发生这种情况的原因是默认情况下打开缓冲,IIS 6无法处理大响应.

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

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


Aru*_*mar 9

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

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

ASP选项

  1. 在选项窗口增加Response Buffering Limit40194304(约40 MB).

增加缓冲区限制

  1. 导航离开选项,在右侧顶部,您可以看到" 操作"菜单,选择" 应用".它解决了我的问题.

应用设置


ste*_*000 7

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

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

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

不缓冲输出的缺点:

  1. 整体页面加载速度减慢
  2. 表格和列将在填充内容时调整其宽度(表格显示为摆动)
  3. 用户可以在完全加载之前单击链接并与页面进行交互.因此,如果页面底部有一些javascript,您可能需要将其移至顶部以确保在某些快速移动的用户点击之前加载它.

有关更多信息,请参阅此知识库文章http://support.microsoft.com/kb/925764

希望有所帮助.


小智 5

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

更换

做而不是rs.EOF

'etc ....你写代码行的代码块

rs.moveNext

当reccount <2500时

如果rs.EOF然后重新计数= 2501

'etc ....你写代码行的代码块

rs.moveNext

response.write"recount ="&recount

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