Trong ứng dụng ASP.NET của tôi, tôi sử dụng HttpWebRequest để tìm nạp tài nguyên bên ngoài mà tôi muốn được lưu vào bộ nhớ cache. Xét đoạn mã sau:Làm cách nào để buộc HttpWebRequest sử dụng bộ nhớ cache trong môi trường 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 sử dụng bộ nhớ cache trình duyệt IE, vì vậy khi tôi chạy nó như là người dùng bình thường (trong ứng dụng thử nghiệm cmd nhỏ), dữ liệu được lưu trữ để %userprofile%\Local Settings\Temporary Internet Files
và phản ứng tiếp theo được đọc từ bộ nhớ cache.
Tôi nghĩ rằng khi mã như vậy được chạy bên trong ứng dụng ASP.NET, dữ liệu sẽ được lưu vào bộ nhớ cache ...\ASPNET\Local Settings\Temporary Internet Files
nhưng không phải là bộ nhớ cache và không bao giờ được sử dụng.
Tôi đang làm gì sai? Làm thế nào để lực lượng HttpWebRequest sử dụng bộ nhớ cache trong môi trường ASP.NET?
Ứng dụng ASP.NET của bạn đang chạy dưới dạng tài khoản nào? Bộ nhớ cache sẽ được tạo trong tài khoản đó. – feroze
@feroze: Ứng dụng đang chạy dưới tài khoản ASPNET và tôi biết đường dẫn Tệp Internet Tạm thời để kiểm tra Environment.SpecialFolder.InternetCache. Vấn đề không phải là tôi không biết các mục trong bộ nhớ cache được tạo ra nhưng chúng không được tạo ra ở tất cả. – piotrsz
Bạn có thể thêm một dòng để đóng và vứt bỏ đối tượng phản hồi: resp.Close(); và sau đó kiểm tra xem bạn vẫn gặp sự cố? – feroze