2010-05-13 20 views
7

ASP.NET uygulamasında, önbelleğe almak istediğim harici kaynakları almak için HttpWebRequest kullanıyorum. Aşağıdaki kodu düşünün:HttpWebRequest, ASP.NET ortamında önbellek kullanmaya nasıl zorlanır?

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 önbellek kullanır, ben (küçük cmd testi uygulamasında) normal kullanıcı olarak çalıştırmak, böylece zaman, veri %userprofile%\Local Settings\Temporary Internet Files için önbelleğe alınır ve sonraki tepkiler önbellekten okunur.

Böyle bir kod ASP.NET uygulamasında çalıştırıldığında, verilerin ...\ASPNET\Local Settings\Temporary Internet Files için önbelleğe alınacağını ancak önbellek kullanılmayacağını düşündüm. Yanlış yapıyorum

? HttpWebRequest ASP.NET ortamında önbellek kullanmak için nasıl zorlanır?

+0

Ne hesabı ASP.NET uygulaması altında çalışan:

Bu makale önbelleğimizi sorun giderme için yararlı oldu? Önbellek bu hesap altında oluşturulacak. – feroze

+0

@feroze: Uygulama, ASPNET hesabı altında çalışıyor ve ben, Environment.SpecialFolder.InternetCache inceleyerek Temporary Internet Files yolunu biliyorum. Sorun, önbellek girişlerinin nerede oluşturulduğunu bilmediğim, ancak hiç oluşturulmadıkları değil. – piotrsz

+0

Yanıt nesnesini kapatmak ve atmak için bir satır ekleyebilir misiniz: resp.Close(); ve hala sorun yaşıyorsanız kontrol edin? – feroze

cevap

0

Yanlış olabilirdim, ancak HttpWebRequest numaralı telefonun belirtilen isteklerden bağımsız olarak önbellek başlıklarına kaynaklık ettiğinden şüphelenirim.

Yanıt üstbilgilerini kontrol edin ve kaynağın önbelleğe alınmaması için açıkça talep edilmediğinden emin olun.

+1

Ben de başlıkları şüpheliyim, bu yüzden aynı kaynak için httprequest yapan küçük bir cmd uygulaması inşa ediyorum. Cmd uygulamasında önbelleğe alındı. Ve ASP.NET uygulamasında değil. – piotrsz

1

Böyle kodunuzda el önbelleği kullanabilirsiniz: Eğer web.config'de ile önbelleğe kullanmak istiyorsunuz gibi

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

Bu Yöntem kullanabilirsiniz.

+0

Muhtemelen özel önbellek uygulama sona erecek ama ben bazı basit "kutudan çıkmış" çözüm için umuyordum ... – piotrsz

+0

Sanırım sorunun için kutunun dışında ama bu büyük bir sorun olmamalı uygulamak. – MUG4N

1

Bu eski bir ileti dizisi olduğunu biliyorum, ancak bu sorunla ilgili olarak düşünülecek başka bir şey de ASP.NET uygulamasının çalıştığı kullanıcı hesabının IE güvenlik ayarlarıdır. HTTP ana bilgisayarını (CachePolicy.Level = Varsayılan, HTTP önbelleklenebilir kaynakları), uzak ana makineyi Güvenilen Siteler listesine ekleyene kadar bizim uygulamalarımızda çalışma değildi. http://blogs.msdn.com/b/ieinternals/archive/2011/03/19/wininet-temporary-internet-files-cache-and-explorer-folder-view.aspx

İlgili konular