Как отключить кэширование на стороне сервера в IIS 7.5 (asp net mvc3) - PullRequest
3 голосов
/ 28 ноября 2011

Я борюсь с настройками IIS в отношении кэширования, вот краткое описание моей проблемы:

Я делаю сайт для мобильных и немобильных устройств, используя одни и те же контроллеры. IE: mysite / page будет обслуживать либо mysite / page.cshtml, либо mysite / M / page.cshtml, в зависимости от устройства.

Вот подвох, он отлично работал с моей локальной средой и средой интеграции (cassiini и iis 6), но на другой машине (2008r2 / iis 7.5), очевидно, существует агрессивная серверная политика кэширования :

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

Напротив, если бы я сначала перезапустил сервер и получил доступ к сайту с помощью моего телефона, то я получил бы мобильную версию на своем рабочем столе (конечно, только для страниц, которые я уже посетил).

До сих пор я пробовал 2 решения:

Отключение OutputCache из моего Web.config:

<httpModules>
  [..]
  <remove name="OutputCache" />
</httpModules>

И снимите флажок «Включить кэш вывода» в «Кэшировании вывода» для моего сайта в IIS.

Что меня беспокоит, так это то, что у меня нет этой проблемы с другим моим сервером (iis 6.0), хотя на этом сервере включено кэширование, что наводит меня на мысль, что это связано с добавлением кэширования в iis 7.

У меня простой вопрос: как отключить кэширование на стороне сервера в IIS 7.5?

Заранее спасибо за ваши огни iis!

Нашел!

Извините, ребята, вы не могли догадаться, что я расширяю RazorViewEngine (фактически я использовал образец мобильного приложения-шаблона mvc3), и этот класс переопределяет FindView, он должен учитывать параметр useCache, но, видимо, независимо от того, как Я настраиваю IIS, он был установлен в true с iis7. Я установил его на false везде. Я посмотрю на соответствующую настройку этого параметра завтра.

public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)

Спасибо за вашу помощь, ребята, теперь я хорошо понимаю все возможности кэширования в IIS;). Интересно, что в IIS 7.0 это происходит по-разному (IIS6 и Cassiini были согласованы).

Edit:

Подробнее: http://aspnet.codeplex.com/workitem/8201?PendingVoteId=8201, это связано с работой отладки / выпуска FindView.

Это была моя точная проблема: http://aspnet.codeplex.com/workitem/8201?PendingVoteId=8201

Ответы [ 3 ]

1 голос
/ 28 ноября 2011

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

 <staticContent>
  <clientCache cacheControlMode="DisableCache"/>
</staticContent>

Обновление:

Вот ссылка

Эта ссылка подробно рассказывает о том, что вы хотите сделать.

1 голос
/ 28 ноября 2011

Как сказал Рик, вам нужно сначала профилировать это. Быстрый тест, однако, заключался бы в реализации контроллера без кэширования, как я здесь изложил: Отключить кэш браузера для всего сайта ASP.NET

0 голосов
/ 28 ноября 2011

Я думаю, вы имеете дело с кешем браузера.Вы профилировали трафик, чтобы увидеть 304?Возможно, вы преследуете не ту проблему.

ПРИМЕЧАНИЕ. Решение для очистки кэша должно включать как клиентскую, так и серверную стороны.

...