ASP Response.Flush()刷新部分数据

时间:2012-06-13 23:05:27

标签: asp.net iis flush

我正在开发一个带有ASP服务器端的Web应用程序,我使用iframe进行数据推送。

ASP处理程序每​​隔一段时间刷新一次javascript到iframe:

context.Response.Write("<script language='javascript'>top.update('lala');</script>");
context.Response.Flush();

我的问题是,有时候,当我收到数据时,我没有得到全文。 例如,我会收到:<script language='javascript'>update('lala');</ 不幸的是,如果在下一秒左右没有其他数据出现,这可以防止执行javascript代码。

我有一个解决方法是每隔500毫秒刷一个线程'..........'。 (然后我将收到script>......,这将完成我的javascript。)

但是我确信必须有一种方法让Response.Flush()发送整个数据块。 有人知道如何正确使用Response.Flush()?

谢谢!

查尔斯

2 个答案:

答案 0 :(得分:3)

我的一位同事发现了这个问题。在IIS上启用了Gzip压缩,这阻止了Web浏览器获取完整的数据块。

解决方案之一:

禁用所有网站的压缩:

对于IIS 5.1,请转到Control Panel/Administrative Tools/Internet Information Services。右键点击Web Sites,点击properties,然后移除ISAPI过滤器Compression

对于IIS 7,请转到My Documents/IISExpress/config/applicationHost.config并更改部分httpCompression,以便不为您的特定页面启用压缩。

仅针对您的网站停用压缩:

在您应用的web.config文件中,在<urlCompression doStaticCompression="true" doDynamicCompression="false"/>部分下添加第<system.webServer>行。

禁用特定网页或特定请求的压缩

这些好人找到了办法:

Can gzip compression be selectively disabled in ASP.NET/IIS 7?

答案 1 :(得分:2)

如果您使用最多3个gzip压缩比,则IIS会提供分块页面。并且gzip比率3和9之间没有显着差异。Look at IIS compression ratio test