2008-12-23 50 views
1

這似乎很愚蠢 - 我必須錯過一些明顯的東西。我有以下代碼(只是作爲測試):如何禁用Response.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> 

當我測試這個本地(遠景64,卡西尼)時,得到所期望的輸出。1,然後如圖2所示,然後3等全部發送非緩衝到瀏覽器。當我在開發服務器(2003,iis6)上嘗試這個功能時,它只是將其全部緩衝並一次發送。有什麼明顯的我失蹤了?我也嘗試在頂部放置buffer = false,但這也不會改變這種行爲。

爲了進一步澄清,我用小提琴手做了一個測試來比較兩臺服務器。第一臺服務器是局域網上的本地服務器,第二臺服務器是公用服務器。提琴手發現兩者之間沒有明顯的區別,除了主機名。在服務器完成加載之前,局域網服務器沒有寫出響應,公共服務器在響應發生時寫入響應。我也可以確認這種情況發生在Firefox和ie中。

+0

它是否在特定機器上緩存,您面臨問題? 嘗試清除有問題的計算機上的瀏覽器緩存。 – shahkalpesh 2008-12-23 05:24:15

+0

我已經嘗試過不同的機器,包括未將以前訪問的頁面的機器 - 無代理.. – benpage 2008-12-23 05:48:41

回答

1

我把我的2美分,當你訪問公共站點,你正在運行一個Web代理,這是內容被緩存的地方。

4

試試這個在Page_Load中:

Response.BufferOutput = false; 

還可以獲得Fiddler副本,看你的HTTP會話,以確保您的網頁不被緩存。

+0

感謝戴夫 - 現在將嘗試小提琴手。忘了提及我也嘗試過BufferOutput = false,但這也沒有什麼區別。 – benpage 2008-12-23 05:39:04

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