ASP.NET MVC 3 неправильно кэширует вывод - PullRequest
0 голосов
/ 07 ноября 2011

У меня есть приложение ASP.NET MVC 3 с базой данных SQL Server 2005.Он связан с базой данных с помощью LINQ to SQL.В некоторых случаях база данных обновляется приложением, но иногда она все еще кэширует старые данные, которые не должны кэшироваться.

Например, если пользователь заполняет форму для публикации BlogEntryComment (один из моих типов LINQ to SQL), он будет добавлен в базу данных.Но новый BlogEntryComment не будет отображаться в моих представлениях, которые его запрашивают.Кроме того, если я удаляю BlogEntryComment, он все равно отображается в представлениях.Вот что я определил в отношении этого поведения:

  • Это не вызвано кэшированием браузера.Я очистил кэш;пробовал одновременно в разных браузерах и на разных компьютерах;безрезультатно.

  • Это не происходит с типами «верхнего уровня», такими как мой тип BlogEntry.Это происходит с типами типа BlogEntryComment, которые имеют отношение (один BlogEntry ко многим комментариям) с моими типами «верхнего уровня».

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

  • Это в конечном итоге покажет обновленные данные, но занимаетдо 15 минут, чтобы он наконец появился.

Я пытался отключить все виды кеша, которые мне удалось найти в Web.config:

...
<system.web>
    ...
    <caching>
        <outputCache enableOutputCache="false" enableFragmentCache="false">
        </outputCache>
    </caching>
    <httpRuntime enableKernelOutputCache="false" />
</system.web>
<system.webServer>
    ...
    <caching enabled="false">
    </caching>
</system.webServer>
...

... но без везения.Есть идеи?

Ответы [ 2 ]

2 голосов
/ 07 ноября 2011

Ознакомьтесь с документацией для l2s DataContext.Он должен быть недолгим - т.е. создавать и распоряжаться каждым http-запросом.Если он статичен, как вы описываете, он будет жить так же, как и домен приложения.

Скорее всего, происходит то, что ваш DC остается в памяти, а последующие запросы данных не отправляются в базу данных.Через 15 минут или что-то еще, ваш домен приложения перезагружается, и вы получаете новый DC и свежие данные.

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

Проверьте свои действия для [OutputCache] украшения. Он переопределяет web.config.

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