在将 Response.buffer(在 ASP 中)设置为 False 时 TCP/IP 连接中断

      Know 2005-6-6 14:43
在将 Response.buffer(在 ASP 中)设置为 False 时 TCP/IP 连接中断
问:
我们的 IIS 6 服务器上运行一个 ASP 应用程序,它负责向我们的用户“间歇性”发送重要的信息。我们希望用户能够在信息可用时立即获取它们,而不必等待 ASP 页完成。为了在 IIS 5 上实现这个目的,我们在 ASP 中将 Response.buffer 属性设置为 False。但我们注意到,在 IIS 6 中这样设置会使客户端的 TCP/IP 连接中断,并导致应用程序出现不可预知的情况。

答:

有的读者可能并不熟悉 ASP (Active Server Pages) 中的 Response.buffer;Response.buffer 是一个属性,如果将它设置为 True(IIS 5 和 6 中的默认设置),则导致 ASP 将脚本执行结果推迟到整个 ASP 页都已运行后再发送。在少数应用程序中,如果将 response.buffer 设置为 True,则会给人应用程序运行速度慢的错觉,因为在整个页面完成之前,不会向用户发送任何信息。某些类型的代码会出现这种情况,例如,长期运行的页面或包含从数据源检索数据并返回信息的循环的页面。对于这些问题,一种可行的解决方法是将 Response.buffer 设置为 False。这样,用户可在信息产生时就会看到它,而不必等待整个页面运行完毕。

我想非常明确地指出,由于将 Response.buffer 设置为 False 而使用户受益的情况并不多见。在您做出这种无奈之举之前,应当想方设法地尝试使用 Response.Flush 方法来达到此目的,该方法可以在应用程序有用户需要立刻获得的信息时(但页面处理尚未完成)将内容推送到客户端。通过使用 Response.Flush,您可以将缓冲功能保持启用状态,并精确控制将响应缓冲内容发送到客户端的时间。

说了这么多,您反映的问题(Response.buffer 为 False 时,客户端 TCP/IP 连接中断)实际上是 IIS 6 中的一个错误。正常情况下,TCP/IP 连接不会中断,您可以使用产品支持服务 (PSS) 提供的更新来修复这个错误,有关详细信息,请参阅 support.microsoft.com/default.aspx?scid=kb;EN-US;834027(也可以在 Windows Server 2003 SP1 发布时安装它来修复该错误)。

有关使用 ASP.net 时针对上述主题的讨论,请参阅 msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag/html/scalenetchapt06.asp。该修补程序只适用于使用 ASP 时的情况,并不适用于 ASP.net。
标签集:TAGS:
回复Comments() 点击Count()

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}