2010-03-11 121 views
5

是否可以緩存服務器和客戶端上的http處理程序的響應?緩存ASP.NET HTTP處理程序服務器和客戶端的響應

這似乎並沒有做的伎倆:

_context.Response.Cache.SetCacheability(HttpCacheability.Public); _context.Response.Cache.SetExpires(DateTime.Now.AddDays(7));

_context是HTTPContext作爲參數傳遞給IHttpHandler實現上的ProcessRequest方法。

任何想法?

更新:客戶端緩存通過httphandler加載的圖像,但是如果另一個客戶端執行相同的調用,則服務器沒有緩存它。因此,對於要求映像的每個客戶端,服務器都會轉到數據庫(和文件流)。如果我們使用aspx頁面而不是使用httphandler和緩存配置文件,則圖像緩存在客戶端和服務器上。

+0

您是否嘗試過使用Fiddler來檢查頭部是否真的在客戶端接收的數據包中? – Timores 2010-03-11 16:55:16

+0

@Timores客戶端緩存對處理程序的調用,但如果另一個客戶端執行相同的調用,服務器不會緩存它。 – 2010-03-11 17:17:16

回答

3

感謝您在評論中的回答。

Cache.SetCacheability用於定義是否允許代理或客戶端緩存,而不是在服務器上。

看一看IIS 7,其中解釋瞭如何在服務器上緩存HTTP處理程序的輸出。

+0

Thx,Timores,我們會檢查的!奇怪的是,使用aspx頁面可以在服務器級別緩存,但是使用httplevel時,需要在IIS中執行此操作(或者iis會將更改保存在web.config中?) – 2010-03-11 22:08:07

4

對於IIS7,這可以在web.config中完成。

例如,假設您的ashx的網址是:

/ashxfiles/myhandler.ashx

...你想查詢字符串PARAMS變化:

ID ,lang

將以下內容添加到您的web.confi G:

<location path="ashxfiles"> 
    <system.webServer> 
     <caching> 
      <profiles> 
       <add extension=".ashx" policy="CacheForTimePeriod" duration="00:00:10" varyByQueryString="id, lang" /> 
      </profiles> 
     </caching> 
    </system.webServer> 
</location> 

此規則適用於目錄中的所有文件ashx的,所以你可能需要把你的ashx的文件在不同的文件夾,如果你需要的緩存設置更精細的控制。

相關問題