0

我正在创建一个将大量数据输出到页面的导入脚本。ColdFusion(或可能是 IIS)似乎只允许输出一定数量的 HTML。当我保存页面时,HTML 文件大约为 4MB。无论浏览器如何,输出都停止在完全相同的位置,因此它似乎是服务器设置。有谁知道会限制页面输出的 IIS 或 ColdFusion 服务器设置?

我没有从数据库中输出 BLOB,它只是页面上 HTML 的总量。我在 Windows Server 2008 R2 64 位上运行 ColdFusion 10 Enterprise 64 位。

4

3 回答 3

1

在 ColdFusion 管理员中检查您的数据源。单击Show Advanced Settings。选中 的框CLOB --Enable long text retrieval (CLOB)

于 2013-05-01T18:06:55.553 回答
0

在此处查看与 IIS 相关的帖子:http: //support.digipede.net/community/showthread.php ?51-Microsoft-IIS-Maximum-Request-Length

它引用了您遇到的相同的 4mb 限制。

这是该帖子中描述的基本 web.config 文件的示例。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.web>
    <httpRuntime maxRequestLength="16384"/>
 </system.web>
</configuration>
于 2013-05-01T18:12:52.157 回答
0

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 字段中的最大值用于为页面生成的响应。

要增加缓冲限制,请执行以下步骤:

  1. 单击开始,单击运行,键入 cmd,然后单击确定。
  2. 键入以下命令,然后按 Enter:
    cd /d %systemdrive%\inetpub\adminscripts
  3. 键入以下命令,然后按 ENTER:
    cscript.exe adsutil.vbs SET w3svc/aspbufferinglimit LimitSize
    注意 LimitSize 表示以字节为单位的缓冲限制大小。例如,数字 67108864 将缓冲限制大小设置为 64 MB。

要确认缓冲区限制设置正确,请执行以下步骤:

  1. 单击开始,单击运行,键入 cmd,然后单击确定。
  2. 键入以下命令,然后按 Enter:
    cd /d %systemdrive%\inetpub\adminscripts
  3. 键入以下命令,然后按 Enter:
    cscript.exe adsutil.vbs GET w3svc/aspbufferinglimit

我不确定“方法 3:禁用缓冲”,因为我还发现此页面在“原因”部分下说明了以下内容:

...当 ASP 响应缓冲被禁用时,IIS 强制使用 4 MB 的默认 Active Server Pages (ASP) 响应缓冲值。

于 2013-05-02T12:31:15.737 回答