Мне нужно очистить кэш IIS на моем сервере. Точная причина подробно описана ниже;но причина не имеет значения.Я на 100% уверен, что это решение мне нужно;как подробно описано ниже, я использовал процесс исключения, чтобы определить, что это действительно проблема, с которой я сталкиваюсь, и решение, которое мне нужно.
У меня есть приложение MVC3, которое можно редактировать (с поддержкой скиновархитектура).Думайте об этом как Wordpress;Пользователи могут разработать тему, скачать ее и активировать на своем сайте.Тема точно контролирует окончательный вывод HTML.Это чрезмерное упрощение, поскольку я предоставляю API с полезными функциями для использования темами.
В любом случае, пользователи могут изменять тему сайта.Тема в настоящее время хранится в статической переменной .Когда отображается страница представления, имя темы определяет местоположение файла макета (который содержит ссылки на файлы CSS и т. Д.) И файлов представления.Тема - это настройка, которая сохраняется в БД.
Например, если у меня есть тема под названием «Foo», то при запросе страницы / Admin я могу использовать /Themes/Foo/Admin.cshtml
.Если у меня есть другая тема с именем «Bar», в которой нет этого файла, то для / Admin она может запросить /Themes/Bar/Generic.cshtml
в качестве макета.
Проблема в том, что изменение темы означает, что каждыйстраница на сайте устарела. Это означает, что на всех сайтах, кэшированных на IIS7, будет отображаться старая тема;это неверноМне нужно, чтобы они показали новую тему.
В любом случае, IIS7 по умолчанию использует кэширование.По сути, мне нужен способ очистки кеша, когда пользователь меняет тему. В настоящее время этого не происходит, и пользователи продолжают видеть старую тему, пока кеш (каким-то образом) сам не истекает.
Я не с использованием кэширования вывода или любой другой формы явного кэширования;это «ванильное» приложение ASP.NET MVC3 с точки зрения кэширования (то есть я не добавлял / не настраивал никакого кэширования).IIS7 имеет свое собственное кэширование по умолчанию.Я знаю это, потому что если я отключу кэширование вывода в IIS7 для своего сайта, я всегда буду видеть правильную тему после изменения.
Как очистить кэш?Другие вопросы SO указывают на использование Cache.blah
, и я попытался использовать HttpContext.Current
, но во время тестов это значение равно нулю (с использованием средства тестирования VS) - поскольку конвейер ASP.NET используется не полностью.
ToОбъясните, в интеграционном тесте я в основном:
- Перейти к localhost / Test /
- Войти (отправить значения в формы)
- Изменить тему наПерейдите на нужную страницу и щелкните по правой ссылке
- Запросить другую страницу
- Проверьте, изменилась ли тема (в зависимости от имени файла макета / CSS).
Все это делается с помощью кода;Я использую порт C # HtmlUnit
, и, наряду с развертыванием моего приложения в / Test в IIS, я могу по существу просматривать его как конечный пользователь.
В настоящее время этот тест проходит около 50% времени.Проблема в том, что IIS кеширует результаты, и я не могу точно сбросить кэш на стороне сервера.
Опять же, я не говорю об очистке сеанса или кэша на стороне пользователя;Сам IIS является виновником кеширования моего приложения.Также я не хочу полностью отключать кеш через настройки IIS, а) потому что я не могу заставить людей, которые устанавливают мое приложение, делать это, и б) потому что кэширование это хорошо.
Так как я могу заставитьочистка кеша на сервере?
Например, я пробовал программно касаться web.config
;это работает, но перерабатывает мой пул приложений и, таким образом, убивает мои статические переменные;каждый запрос означает перезагрузку всех статических переменных из БД, что убивает мою производительность.