2013-11-14 1 views
14

У меня есть приложение ASP.NET MVC4, которое (я думаю) работает правильно с набором JavaScript и CSS, поскольку оно было впервые опубликовано год назад. В течение этого периода мы опубликовали многочисленные обновления и не видели никаких доказательств проблем с доставкой скриптов.Кэш пакетов ASP.NET не очищается после модификаций

Однако, с нашим последним развертыванием кода, я заметил, что обслуживаемый JavaScript не обновляется и что параметр запроса, используемый в запросе для набора сценариев, не изменяется независимо от изменений в содержимом базового сценария ,

Я попытался восстановить решение в Visual Studio и проверил, что модифицированные файлы сценариев правильно развернуты на сервере. Я также явно переработал пул приложений IIS и перезапустил сервер, но проблема не устранена.

Любые идеи, как диагностировать или исправить эту проблему, пожалуйста?

ОБНОВЛЕНИЕ: Проведя сравнение серверов промежуточной и производственной деятельности, я замечаю разницу в поведении. Оба сервера развертываются таким же образом, используя веб-развертывание Visual Studio. Промежуточный сервер правильно и сразу отражает изменения в файлах сценариев, обновляя хеши, которые он использует в URL-адресах, которые связывают сценарии ссылок. Напротив, производственный сервер не обновляет хэши пакетов в ответ на модификации файла сценария и/или изменения в составе наборов скриптов (даже после перезапуска IIS или утилизации пула приложений). Это говорит о том, что проблема изолирована от производственной среды IIS и не связана с моими изменениями кода или конфигурацией Visual Studio.

+0

Вы проверили, что это не проблема кеширования? Вы не указали много деталей, подтвердили ли вы, что в связках содержатся сценарии, которые вы ожидаете, и дубликатов нет? – James

+0

Я бы по-прежнему проверял, что это не просто «ошибка пользователя». Связывание на самом деле не связано с MVC - это еще один компонент MS. Я недавно использовал его с winforms. Все работает как шарм. – Agat

+0

@James: Я рад предоставить более подробную информацию, если вы можете предложить, что я должен искать. Я не уверен, как проверить, является ли это проблемой кэширования. Я подтвердил, что ответы HTTP на запросы пакетов содержат старые версии скриптов (в сокращенной форме). Где еще я должен смотреть и что я должен искать? –

ответ

19

После долгих поисков я в конце концов наткнулся на причину этой проблемы.

Неисправность сервера для обнаружения вновь развернутых изменений в файлах JavaScript была вызвана несколькими подобными именами мини-версиями этих файлов JavaScript, существующих на сервере. Я предполагаю, что это поведение по дизайну, а именно, что процесс связывания отдает предпочтение существующему миниатюрному файлу и игнорирует эквивалентный un-minified файл, даже если он новее.

Я не могу точно знать, как эти несколько минитизированных файлов появились на сервере, но я полагаю, что они были результатом эксперимента, связанного с какой-то альтернативной формой минимизации/группировки. В любом случае простое удаление их позволило механизму связывания увидеть мои развернутые файлы сценариев, и все стало работать.

+0

У меня была эта проблема, потому что я установил веб-Essentials, а затем отключил ее позже - старые мини-файлы оставались висящими, только используемыми сборкой Release. –

+0

Была такая же проблема, я рад, что нашел этот пост! – WIRN

+0

Легко попасть в эту ловушку, если ваш миниатюрный файл не является частью вашего решения, и вы проводите много времени в проводнике решений. –

0

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

+0

Спасибо за ваше предложение. Фактически я в конце концов нашел причину этой проблемы, которую я буду документировать как ответ. –