Проблема с максимальным возрастом IIS7.5 (asp.net кэш вывода mvc)

#asp.net-mvc #outputcache

#asp.net-mvc #выходной кэш #кэш выходных данных

Вопрос:

Мы используем Windows server 2008 R2 Enterprise и IIS7.5.7600.16385, и я развернул простой веб-(asp.net mvc, c #, .net framework 4.5.1) на сервере. контроллер, подобный приведенному ниже, и *.cshtml выводят только дату и время:

 public class DetailController : Controller
{
    [OutputCache(Duration = 300, VaryByParam = "id")]
    public ActionResult Index(int id)
    {
        return View();
    }
}
  

когда я впервые запрашиваю URL http://localhost:80/Detail/Index?id=3 , ответ правильный:

 Cache-Control:public, max-age=300
Date:Mon, 24 Oct 2016 12:11:59 GMT
Expires:Mon, 24 Oct 2016 12:16:51 GMT
Last-Modified:Mon, 24 Oct 2016 12:11:51 GMT
  

но, когда я снова запрашиваю URL-адрес (ctrl f5), неверный максимальный возраст (тогда ответ из кэша сервера):

 Cache-Control:public, max-age=63612908450
Date:Mon, 24 Oct 2016 12:16:34 GMT
Expires:Mon, 24 Oct 2016 12:20:50 GMT
Last-Modified:Mon, 24 Oct 2016 12:15:50 GMT
  

я не знаю, почему максимальный возраст такой большой и как он сгенерирован, он будет повторно преобразован, когда срок действия выходного кэша истечет (ctrl f5).
В моей рабочей среде неправильный максимальный возраст приводит к тому, что при нажатии на URL-ссылку содержимое считывается из дискового кэша браузера.

кто-нибудь знает, как это исправить?

Комментарии:

1. похоже, это ошибка .net framework 4.6.2 (394806), наш сервер .net framework 4.6.2, а не 4.5.1. И я пытаюсь на сервере, на котором установлен .net framework 4.5.1, он работает хорошо, затем я обновляю до 4.6.2, теперь возникает проблема

2. Обратите внимание, что эта ошибка также затронула сам StackExchange. Смотрите здесь ответ Ника Крейвера и его (сердитый) комментарий к отчету об ошибке .

Ответ №1:

Это известная проблема, и ошибка открыта для .NET 4.6.2, поставляемого с KB151864.

Пожалуйста, смотрите здесь для получения дополнительной информации: https://github.com/Microsoft/dotnet/issues/330

Это будет исправлено в .NET 4.6.3. В настоящее время я не знаю, будет ли исправление доступно ранее для 4.6.2.

Единственным известным обходным решением на данный момент является понижение версии и удаление KB151864, когда это возможно.

ПРИМЕЧАНИЕ: ошибка влияет ТОЛЬКО на компиляцию атрибута «max-age» в заголовке Cache-Control для кэшированных ответов. Фактический механизм кэширования и истечение срока службы работают.

Комментарии:

1. Это было исправлено в версии 4.7, новостей о бэкпорте в 4.6.x пока нет.

2. Похоже, они исправили это в майском выпуске 2017 Quality Rollup для 4.6.2.

3.В нем говорится: This release is no longer recommended / available. A bug was found in the May 2017 Preview of Quality Rollup installer that is incompatible with the .NET Framework 4.7 installer. The bug only surfaces when the May 2017 Preview of Quality Rollup (this update) and the .NET Framework 4.7 are installed, in that order.

Ответ №2:

Я только что говорил со службой поддержки Microsoft, и вот что они мне ответили:

Предлагаемый обходной путь заключается в понижении уровня фреймворка с 4.6.2 до 4.6.1 путем удаления обновления KB31511864.

Перейдите в панель управления -> программы -> Программы и компоненты -> Установленные обновления. И удалите KB3151864 , это исправит эту проблему.