Удаление кэша вывода с помощью HttpResponce.RemoveOutputCacheItem не работает на общем хостинге. Веб-формы - PullRequest
1 голос
/ 17 декабря 2011

У меня есть приложение, которое кэширует страницы с директивой кэша вывода asp.net. Когда я вставляю обновление или удаляю что-то с панели управления, я хочу сбросить кэш вывода. Локально мой алгоритм прекрасно работает. Когда я запускаю его на общем хосте, кеш не очищается.

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

OutputCacheHelper.Directories.Add(OutputCacheHelper.AllPagesKey, new List<string>() {
         "/Default.aspx",
       "/pages/DisplayContactForm.aspx",
       "/pages/PhotosGallery.aspx",
       "/pages/Schedule.aspx",
       "/pages/Shows.aspx",
       "/pages/cms/DisplayCategory.aspx",
       "/pages/cms/DisplayCategoryAlternative.aspx",
       "/pages/cms/DisplayFrontPage.aspx",
       "/pages/cms/ViewAirstaff.aspx",
       "/pages/cms/ViewArticle.aspx",
       "/pages/cms/ViewShow.aspx"
});

Затем, когда я вставляю / обновляю / удаляю данные из базы данных, я использую приведенный выше алгоритм:

        foreach (string directory in Directories[AllPagesKey])
        {

            HttpResponse.RemoveOutputCacheItem(directory);
        }

Я не знаю, почему это не работает на виртуальном хостинге. Пожалуйста помоги. Спасибо и извините за мой английский.


EDIT

Извините за задержку. Я был в командировке.

Я понял это ... Не так, как я хочу, но я могу применить только кэш вывода. (потому что Azure недоступен) Я добавляю зависимость от файла, а затем, когда я хочу очистить кеш, я просто изменяю содержимое. Это нормально?

Ответы [ 2 ]

2 голосов
/ 17 декабря 2011

Ваш общий хостинг - это отдельный сервер или ферма серверов (например, AZURE)?
Кэш-память - это уровень сервера, поэтому в контексте нескольких экземпляров очистка кеша istance не влияет на кеш на других серверах..

РЕДАКТИРОВАТЬ
В контексте нескольких серверов вы можете:
-use общий кэш (AZURE предоставляет его, но стоит денег)
- создатьсистема, которая управляет кешем (т. е. использует таблицу БД для хранения времени последнего обновления для каждого объекта, так что любой сервер, прежде чем заглядывать в кеши, должен быть сброшен)
- избегать использования кеша

0 голосов
/ 18 декабря 2011

Развернуто ли ваше приложение как веб-приложение или веб-сайт? Если вы работаете в виртуальном каталоге, я считаю, что вам нужно включить путь к виртуальному каталогу в вызовах к RemoveOutputCacheItem().

Сказав это, вы рассматривали возможность использования уведомлений о запросах SQL Server (Service Broker), чтобы сделать это вместо этого? ASP.NET делает это довольно легко. Например, см. SqlDependency, SqlCacheDependency и Response.AddCacheItemDependency().

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