суббота, 20 сентября 2008 г.

app_offline.htm и статический контент

В ASP.NET 2.0 есть удобная фича, когда надо провести над сайтом массовые обновления. Чтобы пользователи не получали случайные ошибки, работу сайта можно временно приостановить, положив в корень приложения файл app_offline.htm. При этом пул приложения выключается (это фича также полезна если нам надо просто перегрузить сайт).

При наличии этого файла все запросы к сайту возвращают его содержимое с кодом 404 (чтобы поисковики не проиндексировали). Но вот засада – при обращение к статическим файлам – тоже возращается его содержимое! Т.е. не css внешний, ни картинки вставить в этот файл не получится.

Скорей всего, это происходит только с файлами ассоциированными для обработки ASP.NET. Но в встроенном веб-сервере Visual Studio Cassini и IIS 7.0 все файлы им обрабатываются! И выключить на уровне только папки со статическим содержимым модуль ASP.NET невозможно, только на уровне всего приложения. :(

UPDATE: Решил проблему несколько подругому :).

Так как с ASP.NET мы ничего сделать не можем, оффлайновый файл всегда на него влияет, нам нужен второй сайт, где ASP.NET нет. Но для этого не обязательно держать второй сервер с копией статических ресурсов. Можно завести второй сайт указывающий на ту же физическую директорию, где и основное приложение, и выключить для него ASP.NET.

Или же, что более элегантно, если все ресурсы хрянться в одной папке – создать второй сайт с корневой директорией именно в ней. Там не будет никакого asp_offline.htm файла – так что ASP.NET отключать не надо.

Конечно, чтобы обращаться к этому второму сайту – ему надо будет завести dns имя, что-нибудь типа static.example.com. И соответсвенно, прописать ссылки на необходимые статические ресурсы в файле app_offline.htm на этот домен.

Вот такое решение на практике. :)

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