2010-05-13 92 views
7

在我的ASP.NET應用程序中,我使用HttpWebRequest來獲取我想要緩存的外部資源。請看下面的代碼:如何強制HttpWebRequest在ASP.NET環境中使用緩存?

var req = WebRequest.Create("http://google.com/"); 
req.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.CacheIfAvailable); 
var resp = req.GetResponse(); 
Console.WriteLine(resp.IsFromCache); 
var answ = (new StreamReader(resp.GetResponseStream())).ReadToEnd(); 
Console.WriteLine(answ.Length); 

HttpWebRequest的使用IE緩存,所以當我運行它作爲普通用戶(在微小的CMD測試程序),數據緩存到%userprofile%\Local Settings\Temporary Internet Files和明年響應從緩存中讀取。

我認爲,當這樣的代碼是ASP.NET應用程序中運行,數據將被緩存到...\ASPNET\Local Settings\Temporary Internet Files但它不是,並且永遠不會使用的緩存。

我做錯了什麼?如何強制HttpWebRequest在ASP.NET環境中使用緩存?

+0

什麼帳戶下運行的ASP.NET應用程序?緩存將在該帳戶下創建。 – feroze 2010-05-13 20:49:06

+0

@feroze:該應用程序在ASPNET帳戶下運行,我知道檢查Environment.SpecialFolder.InternetCache的臨時Internet文件路徑。 問題不在於我不知道緩存項的創建位置,而是根本不創建它們。 – piotrsz 2010-05-15 10:35:11

+0

你可以添加一行來關閉並處理響應對象:resp.Close();然後檢查你是否仍然有問題? – feroze 2010-05-19 01:27:07

回答

0

我可能是錯的,但我會懷疑HttpWebRequest方面從資源緩存頭不管你陳述的慾望。

檢查響應頭並確保資源沒有明確要求不被緩存。

+1

我也懷疑標題太多,所以我建立了一個小的cmd應用程序,使httprequest到同一個資源。在cmd應用程序中它被緩存。而在ASP.NET應用程序中則不是。 – piotrsz 2010-05-13 12:14:47

1

您可以手動使用緩存在你的代碼是這樣的:

Cache.Insert("request", req, Nothing, DateTime.Now, TimeSpan.FromSeconds(30), TimeSpan.Zero) 

您可以使用此方法,就像您在web.config中使用緩存有。

+0

我可能會實現自定義緩存,但我希望有一些簡單的「開箱即用」解決方案... – piotrsz 2010-05-15 10:37:08

+0

我認爲您的問題沒有開箱即用,但這不應該是一個大問題實行。 – MUG4N 2010-05-15 10:57:15

1

我知道這是一箇舊線程,但有關此問題需要考慮的另一件事是ASP.NET應用程序運行的用戶帳戶的IE安全設置。在將遠程主機添加到「受信任的站點」列表之前,HTTP緩存(CachePolicy.Level = Default,HTTP緩存資源)不適用於我們的應用程序。

這篇文章是對我們的緩存有助於故障排除:http://blogs.msdn.com/b/ieinternals/archive/2011/03/19/wininet-temporary-internet-files-cache-and-explorer-folder-view.aspx