В моем приложении ASP.NET я использую HttpWebRequest для выборки внешних ресурсов, которые я хотел бы кэшироваться. Рассмотрите следующий код:
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?
Я могу ошибаться, но подозреваю, что HttpWebRequest
уважает заголовки кэша с ресурса независимо от заявленных вами желаний.
Проверьте заголовки ответов и убедитесь, что ресурс явно не запрашивает кэширование.
Вы можете использовать кэш вручную в своем коде следующим образом:
Cache.Insert("request", req, Nothing, DateTime.Now, TimeSpan.FromSeconds(30), TimeSpan.Zero)
Вы можете использовать этот метод, как если бы вы использовали кеширование в web.config.