如何禁用Response.Buffer

时间:2008-12-23 05:20:56

标签: c# asp.net buffer

这似乎很愚蠢 - 我必须遗漏一些明显的东西。我有以下代码(仅作为测试):

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
    void page_load(object o, EventArgs e)
    {
        Response.Write(new string(' ', 255));
        Response.Flush();
        for (int i = 0; i < 10; i++)
        {
            Response.Write(i + "<BR>");
            Response.Flush();
            System.Threading.Thread.Sleep(500);
        }

    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        main div
    </div>
    </form>
</body>
</html>

当我在本地测试(vista x64,cassini)时,我得到所需的输出.. 1,然后2,然后3等都被非缓冲地发送到浏览器。当我在开发服务器(2003,iis6)上尝试这个时,它只是缓冲它并立即发送它。有什么东西显而易见我错过了吗?我也尝试在顶部放置buffer = false,但这也不会改变这种行为。

进一步澄清,我已经与fiddler进行了一项测试,以比较两台服务器。第一个服务器是局域网上的本地服务器,第二个是公共服务器。 fiddler发现两者之间没有明显的区别,主机名除外。在页面加载完成之前,局域网服务器没有写出响应,公共服务器在响应时写入了响应。我也可以确认这种行为发生在firefox和ie。

3 个答案:

答案 0 :(得分:4)

在Page_Load中尝试:

Response.BufferOutput = false;

同时获取Fiddler的副本并观看您的HTTP对话,以确保您的网页未被缓存。

答案 1 :(得分:1)

当你访问公共网站时,我把2美分放在上面,你正在通过网络代理运行,这就是内容被缓存的地方。

答案 2 :(得分:0)

您也可以通过编程方式指示浏览器放弃所选页面的缓存(尽管由浏览器来实际遵守您的指令)。

Public Sub KillCache()
    Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache)
    Response.Cache.SetExpires(New Date(1900, 1, 1))
    Response.Cache.SetMaxAge(New TimeSpan(0, 0, 5))   '// 5 SECONDS'
    Response.Cache.SetNoServerCaching()
    Response.Cache.SetNoStore()
    Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches)
End Sub