8

这个问题从另一个板上开始,但是非常迅速和乐于助人的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。您会注意到,在工作版本中,每一步都会更新,但在没有的版本中,它会在那里等待很长时间,直到一切都完成,然后立即对客户端进行所有更新......这让我很难过。

4

5 回答 5

5

嘿,杰森。抱歉,您仍然遇到此问题。

我要做的是设置一个简单的页面,例如:

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 次)。我发现给他们一个简单的测试用例对解决这些问题大有帮助。

绝对让我们知道它最终会是什么。我猜是某种内联缓存或反向代理,但我很好奇。

于 2008-08-25T17:41:10.967 回答
3

我不知道你可以强制缓冲 - 但是你和服务器之间的反向代理服务器会影响缓冲(因为缓冲区会影响代理的连接 - 而不是你的浏览器的连接)。

于 2008-08-24T13:26:19.697 回答
2

您应该确保 IIS 或任何其他过滤器都没有尝试压缩您的响应。您的生产服务器很可能为动态页面启用了 IIS 压缩,例如带有 .aspx 后缀的页面,而您的开发服务器没有。

如果是这种情况,IIS 可能会在尝试压缩并将任何结果发送回客户端之前等待整个响应(或相当大的块)。

我建议使用Fiddler来监控来自生产服务器的响应,并确定响应是否正在被 gzip 压缩。

如果响应压缩确实是问题所在,您可以指示 IIS 通过 Content-Encoding:Identity 标头忽略特定响应的压缩。

于 2008-08-25T17:37:00.490 回答
2

我对此进行了一些徒劳的研究,但我会分享我的想法,希望它有所帮助。

在这种情况下,IIS 是位于客户端和服务器之间的事物之一,因此了解每种情况下涉及的 IIS 版本可能很有用——并调查 IIS 是否可以通过某种方式在打开时执行自己的缓冲联系。

虽然它不是很赚钱,但这篇关于IIS6 v IIS 5的文章是我正在考虑的那种事情。

于 2008-08-24T13:30:02.387 回答
2

问题是,如果您打开了动态 gzip 压缩(这些天默认情况下),IIS 将进一步缓冲输出(超出 ASP.NET 的缓冲)。

因此,要停止 IIS 缓冲您的响应,您可以采取一些技巧来欺骗 IIS,使其认为客户端无法通过覆盖Request.Headers["Accept-Encoding"]标头来处理压缩(是的,Request .Headers,相信我):

Response.BufferOutput = false;
Request.Headers["Accept-Encoding"] = ""; // suppresses gzip compression on output

在发送响应时,IIS 压缩过滤器检查请求标头Accept-Encoding: gzip ...,如果不存在,则不压缩(因此进一步缓冲输出)。

于 2017-09-26T11:39:27.820 回答