IIS 6.0 为 ASP 页引入了 4MB 的响应缓冲区大小限制。也许相同的设置会影响 ColdFusion 页面。在此处查看完整的页面详细信息。您应该能够通过检查 IIS 日志中“症状”下描述的消息来确认这是否是原因。即使您没有收到这些消息,您也可以尝试增加缓冲区大小以查看它是否会增加您的响应大小。
症状
考虑以下场景。客户端 Web 浏览器向运行 Internet 信息服务 (IIS) 6.0 的 Web 服务器发送对活动服务器页面 (ASP) 的请求。ASP 请求生成较大的响应。在这种情况下,可能会出现以下症状:
- 响应失败。
- 发生 HTTP 500 服务器错误,并且您在客户端 Web 浏览器中收到以下错误消息:
Response object error 'ASP 0251 : 80004005'
Response Buffer Limit Exceeded
/PageName.asp, line LineNumber
注意 PageName.asp 表示所请求的 ASP 页的名称。LineNumber 表示在响应缓冲区超出限制之前处理的文件中的最后一个行号。
- IIS 日志文件在 cs-uri-query 字段中包含以下错误:
|0|ASP_0251_:_80004005|Response_Buffer_Limit_Exceeded
原因
发生此问题的原因是在 IIS 6.0 中引入并添加到 IIS 5.0 中的行为发生了变化。这些版本的 IIS 强制执行 4 MB 的默认 ASP 响应缓冲区限制。此限制可防止大型 ASP 响应对承载 Web 应用程序的 IIS 进程产生不利影响。如果 ASP 请求生成的响应大于配置的缓冲区限制,您会遇到“症状”部分中提到的症状。
解析度
在大多数情况下,4 MB 缓冲区限制对于发送到 Web 客户端的 ASP 响应来说已经足够了。如果此限制不足,请使用以下方法之一:
方法 1:减小响应大小
如果响应大于 4 MB 默认值,则此大小通常会导致用户体验不佳。Web 浏览器必须通过网络接收大响应。然后,Web 浏览器必须解析并显示一个非常大的 HTML 响应。
如果接收响应的 Web 客户端不必将整个响应视为单个页面,则可以减小响应大小。例如,您可以重写基于 ASP 的应用程序,以便在网格中显示数据。因此,Web 客户端可以一次浏览一页数据。您可以使用 Microsoft ASP.NET 中的 GridView 类来实现此效果。有关 ASP.NET 中的 GridView 类的详细信息,请访问以下 Microsoft 开发人员网络 (MSDN) 网站:http:
//msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview。 aspx
方法 2:使用 Response.Flush 方法
如果您在 ASP 文件中使用循环来构建大表或构造数据,则可以使用 Response.Flush 方法。当你使用这种方法时,你仍然可以使用缓冲。但是,您还可以完全控制发送到 Web 客户端的数据量,并且可以控制响应的缓冲区大小。有关 Response.Flush 方法的详细信息,请访问以下 MSDN 网站:http:
//msdn2.microsoft.com/en-us/library/ms525560.aspx
方法 3:禁用缓冲(请参阅下面的附加说明)
您可以在 Web 服务器、应用程序级别或页面级别禁用缓冲。当您禁用缓冲时,Web 服务器使用 HTTP 分块传输编码将响应发送到 Web 客户端。
要在应用程序级别禁用缓冲,可以使用 AspBufferingOn IIS 元数据库属性。有关 AspBufferingOn IIS 元数据库属性的详细信息,请访问以下 Microsoft 网站:
http: //www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/fbe1bd5f-52d4-4a26-8ab1-7bb897bb3d53.mspx
要在页面级别禁用缓冲,可以使用 Response.Buffer 属性。有关 Response.Buffer 属性的详细信息,请访问以下 MSDN 网站:http:
//msdn2.microsoft.com/en-us/library/ms526001.aspx
方法四:增加缓冲限制
如果以下条件之一为真,您可以增加缓冲限制:
- 客户端不是 Web 浏览器。
- 您不能重新设计应用程序以利用分页技术,例如 GridView 类。
如果必须增加缓冲区限制,请选择允许最大已知响应大小的缓冲区限制。如果您事先不知道最大响应大小,您可以在测试期间将缓冲区限制增加到一个较大的值。完成测试后,将 IIS 日志文件中 sc-bytes 字段中的最大值用于为页面生成的响应。
要增加缓冲限制,请执行以下步骤:
- 单击开始,单击运行,键入 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 GET w3svc/aspbufferinglimit
我不确定“方法 3:禁用缓冲”,因为我还发现此页面在“原因”部分下说明了以下内容:
...当 ASP 响应缓冲被禁用时,IIS 强制使用 4 MB 的默认 Active Server Pages (ASP) 响应缓冲值。