为什么Response.BufferOutput = False,不起作用?
这个问题是从另一个问题开始的,但是在这里也非常迅速和乐于助人的戴夫·沃德(Dave Ward)也在这里,所以我希望在这里谈谈,希望这是剩下的最后一个难题。 -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ----------------
基本上,我一直在寻找一种从很长的过程中不断更新网页的方法。我以为AJAX是必经之路,但是Dave撰写了一篇有关使用JavaScript的不错的文章。我将其集成到我的应用程序中,并且在客户端上运行良好,但在服务器WebHost4Life上却无法运行。我有另一台服务器@ Brinkster,并决定在那里尝试并运行。在我的客户端WebHost4Life和Brinkster上,所有代码都是相同的,因此WebHost4Life显然存在某些问题。
我打算给他们写一封电子邮件或者请求技术支持,但我想保持主动,并设法弄清楚他们的最终状况会导致这种差异。我做了所有我想做的事情,以关闭诸如Page.Response.BufferOutput = False
之类的缓冲功能。他们可以实施哪些服务器设置来引起这种差异?在没有他们帮助的情况下,我有什么办法可以自己绕过它吗?如果没有,他们将需要做什么?
作为参考,位于http://www.jasoncomedy.com/javascriptfun/javascriptfun.aspx的应用程序的较简单版本的工作版本的链接位于@ http://,而无法使用的相同版本www.tabroom.org/Ajaxfun/Default.aspx。我们会在工作版本中注意到,我们会在每个步骤中获得更新,但在没有的步骤中,它会停留很长时间,直到一切完成,然后立即对客户端进行所有更新...这让我很难过。
解决方案
回答
我不知道我们可以强制缓冲,但是我们与服务器之间的反向代理服务器会影响缓冲(因为缓冲然后影响代理的连接而不是浏览器的连接)。
回答
我对此进行了一些徒劳的研究,但我希望能有所帮助,但我会分享自己的想法。
在这种情况下,IIS是客户端和服务器之间的事务之一,因此了解每种情况下涉及的IIS版本并调查IIS是否有某种方式可以在打开的连接上执行自己的缓冲可能会很有用。 。
尽管这笔钱还不足够,但是有关IIS6 v IIS 5的这篇文章还是我所想的。
回答
我们应该确保IIS和其他任何过滤器都没有试图压缩响应。生产服务器很可能为动态页面(例如带有.aspx后缀的页面)启用了IIS压缩,而开发服务器则没有。
如果是这种情况,IIS在尝试压缩并将任何结果发送回客户端之前,可能正在等待整个响应(或者相当大的块)。
我建议使用Fiddler监视来自生产服务器的响应,并确定响应是否被gzip压缩。
如果确实是响应压缩的问题,则可以通过Content-Encoding:Identity标头指示IIS忽略特定响应的压缩。
回答
嗨,杰森。抱歉,我们仍然无法解决此问题。
我要做的是建立一个简单的页面,例如:
protected void Page_Load(object sender, EventArgs e) { for (int i = 0; i < 10; i++) { Response.Write(i + "<br />"); Response.Flush(); Thread.Sleep(1000); } }
如前所述,请确保.aspx文件中没有@Page声明以外的任何标记。在正常情况下,有时可能会触发页面缓冲。
然后,将技术支持人员指向该文件并描述所需的行为(10个更新,每秒1个更新)。我发现给他们一个简单的测试用例对解决这些问题大有帮助。
绝对要让我们知道它最终是什么。我正在猜测某种内联缓存或者反向代理,但我很好奇。