Как заставить HttpWebRequest использовать кеш в среде ASP.NET? - PullRequest
7 голосов
/ 13 мая 2010

В моем приложении 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?

Ответы [ 3 ]

1 голос
/ 13 мая 2010

Вы можете использовать кеш вручную в своем коде так:

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

Вы можете использовать этот метод, как если бы вы использовали кэширование в web.config.

1 голос
/ 21 декабря 2011

Я знаю, что это старый поток, но еще одна вещь, которую необходимо учитывать в связи с этой проблемой, - это настройки безопасности IE для учетной записи пользователя, под которой работает приложение ASP.NET. 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

0 голосов
/ 13 мая 2010

Я могу ошибаться, но я подозреваю, что HttpWebRequest учитывает заголовки кэша ресурса независимо от ваших заявленных желаний.

Проверьте заголовки ответа и убедитесь, что ресурс явно не требует кэширования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...