Кэширование вывода ASP.NET - динамическое обновление зависимостей

У меня есть приложение ASP.NET, которое требует кеширования вывода. Мне нужно сделать недействительными кэшированные элементы при изменении данных, возвращаемых веб-службой, поэтому простой продолжительности недостаточно.

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

Чтобы связать вывод страницы с этой зависимостью, я думаю, мне следует использовать следующий метод:

Response.AddCacheItemDependency (cacheKey);

Я борюсь с тем, что я должен добавить в кеш?

Моя страница зависит от одного значения, возвращаемого веб-службой. В настоящее время я считаю, что я должен создать Custom Cache Dependency через создание подкласса CacheDependency и сохранить текущее значение в кеше. Затем я могу использовать Response.AddCacheItemDependency для формирования зависимости.

Затем я могу периодически проверять значение и NotifyDependencyChange, чтобы аннулировать мой кешированный HTTP-ответ.

Проблема в том, что мне нужно обеспечить немедленную очистку кеша, поэтому периодической проверки недостаточно. Как я могу гарантировать, что мой зависимый объект в кеше, который представляет значение, возвращаемое веб-службой, будет повторно оценен до того, как HTTP-ответ будет извлечен из кеша?

С уважением, Колин Э.


person ColinE    schedule 13.01.2010    source источник


Ответы (2)


Я считаю, что вы на правильном пути со своей зависимостью от кеша. Однако, если вы не «периодически проверяете» возвращаемое значение веб-службы, как узнать, когда она вернет новое значение? Возможно, вам потребуется настроить веб-службу в другом направлении, чтобы при изменении значения в другой системе он мог вызывать вашу систему и аннулировать старый кеш и вставлять новое значение.

person Ray    schedule 13.01.2010
comment
Привет, Рэй, спасибо за ответ. Вызов веб-службы стоит недорого, и я могу делать это каждый раз, когда запрашивается страница. Что мне нужно знать, так это то, где в моем приложении ASP я должен выполнить эту проверку, она должна произойти до того, как сервер определит, следует ли возвращать кешированный ответ. - person ColinE; 13.01.2010
comment
Что ж, вы можете делать это при каждом запросе страницы, но это кажется расточительным, если у вас загруженный сайт. Если вызов такой недорогой, можно ли жить с очень коротким периодом (несколько секунд) между тестами кеша? Или абсолютно необходимо, чтобы данные не были устаревшими ни на секунду? (Конечно, в какой-то момент данные будут устаревшими, поскольку они находятся на экране пользователя и ждут, чтобы их прочитали.) - person Ray; 13.01.2010

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

System.Web.HttpResponse.RemoveOutputCacheItem(path)
person Paul Hiles    schedule 13.01.2010
comment
Привет, спасибо за информацию - я не знал об этом. Когда пользователь запрашивает страницу, могу ли я удалить страницу из кеша до того, как сервер проверит кешированный ответ? Это позволило бы мне проверять удаленную веб-службу перед обработкой каждого запроса страницы. - person ColinE; 13.01.2010
comment
Нет, вам придется аннулировать кеш до того, как страница будет запрошена. Обычно вы делаете это при обновлении данных - либо автоматически, используя зависимости кеша, либо вручную, используя приведенный выше код. - person Paul Hiles; 14.01.2010