【问题标题】:Buffer issue in Classic ASP经典 ASP 中的缓冲区问题
【发布时间】:2019-05-01 00:00:22
【问题描述】:

我们有一个经典的 ASP 应用程序在 Windows Server 2012 和 IIS(版本 8)Web 服务器上运行,并且必须修改页面以允许从数据库中检索更大的数据集。当我们在不修改任何 IIS 设置的情况下运行它时,我们会在 IE 中收到以下错误;

我们尝试将站点级别和 IIS 应用程序级别的缓冲区级别从标准 4194304 (4Mb) 限制修改为 20971520 (20Mb),但是当我们在 IE 和 chrome 中将输出更改为下图时,它会不断询问每 20 秒左右获取一次凭据。

为什么会这样?请问如何解决?

【问题讨论】:

  • 一个简单的 response.flush 在一个循环例如可以解决问题...
  • 您确定没有缺少下一个、rs.movenext 或类似的循环吗?这也会使网站无法访问......同时填充缓冲区。

标签: iis asp-classic


【解决方案1】:

您最好使用Response.Buffer = False 禁用缓冲区

默认情况下,IIS 缓冲所有输出,这意味着在构建网页时,它会存储在内存(缓冲区)中,直到您的脚本完成执行,然后整个页面从缓冲区发送到客户端计算机一个文件。如果您正在构建一个包含大量数据的非常大的页面,则可能会导致缓冲区溢出。增加缓冲区大小限制是一种解决方案,虽然我不明白为什么它会开始要求凭据,但您一定是在 IIS 中配置错误。

另一种解决方案是使用Response.Flush() 间歇性地 从缓冲区刷新数据并将 HTML 分块发送到客户端计算机。但是完全禁用缓冲区将为您完成此操作,而无需 Response.Flush()

【讨论】:

  • Response.Buffer 切换到False 将有助于but it still buffers (its not disabled) the difference is the buffer is automatically flushed 与每个Response.Write 通话。因此,如果您尝试在一次调用中写入的数据仍然超出缓冲区,您仍然会收到相同的错误。
  • 增加缓冲区大小有什么缺点吗?默认情况下为 4 MB,但自从 20 年前将该数字设置为默认值以来,服务器已经变得更好。我知道它会增加到 2GB - 增加缓冲区大小只会增加对服务器内存的需求吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多