本文可帮助你解决使用 Active Server Pages (ASP) 中的方法发送文件时发生的 Response.BinaryWrite
错误(HTTP 500 或超出响应缓冲区限制)。
原始产品版本: Internet Information Services、Active Server Pages (ASP)
原始 KB 数: 944886
现象
假设出现了下面这种情景:
- 将文件从安装了 Internet Information Services (IIS) 的 Web 服务器发送到客户端计算机。
- 使用
Response.BinaryWrite
该方法将文件发送到客户端计算机,并将AspBufferingOn
属性设置为 False。
在此方案中,你可能会在客户端计算机上收到以下错误消息之一:
错误消息 1
HTTP 500 - 内部服务器错误
错误消息 2
响应对象错误“ASP 0251 : 80004005”
超出响应缓冲区限制
执行 ASP 页会导致响应缓冲区超出其配置的限制。
此外,你可能会收到类似于 IIS 日志文件中的以下消息:
ASP_0251_:_80004005|Response_Buffer_Limit_Exceeded
原因
出现此问题的原因是,当禁用 ASP 响应缓冲时,IIS 强制使用默认的 ASP 响应缓冲区值 4 MB。
在大多数情况下,4 MB 缓冲区限制足以满足发送到 Web 客户端的 ASP 响应。 如果此限制不足,请使用以下方法之一。
解决方法 1:减小响应大小
若要在使用方法并关闭 ASP 缓冲时 Response.BinaryWrite
解决此问题,请验证返回给客户端的数据是否不超过 4 MB。
如果响应大于 4 MB 默认值,则此大小经常会导致用户体验不佳。 Web 浏览器必须通过网络接收大型响应。 然后,Web 浏览器必须分析和显示大型 HTML 响应。
解决方法 2:启用 ASP 响应缓冲并增加缓冲区限制
可以使用 AspBufferingOn
IIS 元数据库属性在应用程序级别启用或禁用缓冲。
备注
在 IIS 中,可以使用文件或Web.config
文件中 ASP 节ApplicationHost.config
<System.webserver>
中的值在应用程序级别bufferingOn
启用或禁用 ASP 响应缓冲。
若要在页面级别启用或禁用缓冲,可以使用该 Response.Buffer
属性。
如果必须增加缓冲区限制,请选择允许最大已知响应大小的缓冲区限制。 如果事先不知道最大响应大小,则可以在测试期间将缓冲区限制增加到较大的值。 测试完成后,请使用 IIS 日志文件中 SC 字节 字段中显示的最大值,获取为页面生成的响应。
若要在 IIS 中增加缓冲限制,请执行以下步骤:
选择“ 开始”,选择“ 运行”,键入 cmd,然后选择“ 确定”。
cd /d %systemdrive%\inetpub\adminscripts
键入命令,然后选择 Enter。cscript.exe adsutil.vbs SET w3svc/aspbufferinglimit LimitSize
键入命令,然后选择 Enter。备注
LimitSize
表示缓冲限制大小(以字节为单位)。 例如,67108864数字将缓冲限制大小设置为 64 MB。
若要确认已正确设置缓冲区限制,请执行以下步骤:
- 选择“ 开始”,选择“ 运行”,键入 cmd,然后选择“ 确定”。
-
cd /d %systemdrive%\inetpub\adminscripts
键入命令,然后选择 Enter。 -
cscript.exe adsutil.vbs GET w3svc/aspbufferinglimit
键入命令,然后选择 Enter。
详细信息
使用 Response.BinaryWrite
方法和 ASP 响应缓冲处于禁用状态时,只能向客户端发送 4 MB 的数据,除非显式设置了页面的缓冲限制属性。 默认情况下,IIS 中属性的值 bufferLimit
为 4,194,304 字节。
此外,如果对客户端的响应大于缓冲区限制值, BinaryWrite()
即使 ASP 响应缓冲已关闭,API 也会失败。
备注
建议启用 ASP 响应缓冲。 ASP 响应缓冲可提高 Web 应用程序的性能。