Каковы предлагаемые альтернативы часто сломанному App_offline.htm Hack?

StackOverflow https://stackoverflow.com/questions/5301847

  •  22-10-2019
  •  | 
  •  

Вопрос

В некоторых сценариях, размещение app_offline.htm В корне просто правильное: вы делаете некоторые обновления, сообщение появляется во время обновления, и это все. Идея в том, что, как говорит Microsoft, что до что-либо вызывается, IIS сначала проверяет, есть ли app_offline.htm, и если да, то это отменяет все и отображает его.

Так что для такого хорошего, но во многих ситуациях это не работает:

  • Когда у вас есть ошибка компиляции на странице ASPX и пользовательские ссылки напрямую на нее
  • Когда у вас есть противоречивые собрания
  • Когда у вас есть ошибка анализа в вашем web.config
  • В разгар удаления / загрузки всего сайта.
  • Прямая ссылка на статическую HTML -страницу все еще отображается как таковая
  • File-not Foneds, добычи, добычи бросают до того, как сообщение будет показано

Возможно, существует больше сценариев, которые терпят неудачу. Моя точка зрения: для любой серьезной работы по обновлению, app_offline.htm не подходит. Иногда я создаю перенаправление в IIS, на другой сайт, но другой сайт не всегда может быть доступен, и он может запутать пользователей.

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

Это было полезно?

Решение

Никто больше не упомянул web.config и перекомпиляция, так что вот оно. Я столкнулся с этой проблемой. Я не согласен с человеком, который сказал, что он «не предназначен для использования Prod»: VS 2010 использует APP_OFFLINE при развертывании, поэтому он запекается в код.

Обходной путь (кредит идет к Курту Шиндлеру, сообщение в блоге здесь).

  1. Скопируйте app_offline.htm на ваш сайт
  2. Сделайте web.config, который выглядит так (см. Ниже пронумерованный блок)
  3. Скопируйте этот web.config до вашего удаленного каталога
  4. Скопируйте все файлы сайта, кроме вашего True Web.Config вдали до удаленного режима
  5. Скопируйте Real Web.config до удаленного DIR (который должен начать перекомпилировать)

web.config:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration>
  <system.web>
    <httpRuntime waitChangeNotification="300"
       maxWaitChangeNotification="300"/>
  </system.web>
  <system.webServer>
     <modules runAllManagedModulesForAllRequests="true"  />
  </system.webServer> 
</configuration>

Следствием этого является то, что Вы не можете напрямую использовать приложение VS 2010 Если вы заботитесь о том, что конечные пользователи не видят YSOD во время развертывания. Таким образом, вам нужно будет использовать NANT или какой -нибудь другой инструмент развертывания для этого.

Другие советы

Один из способов, которым я видел это, обработанное на нескольких сайтах с очень высоким трафиком, - это иметь несколько папок в каталоге inetPub. Что-то типа:

inetpub
     \ site2011-02-03 
     \ site2011-03-14

Где «Site2011-02-03» является существующим сайтом, а «Site2011-03-14»-это то, что сегодня выдвинуто. Как только толчок к новой папке завершит, вы измените сайт IIS, чтобы указать на новый каталог. В случае неудачи вы меняете IIS на более старую версию.

Откровенно говоря, я никогда не сталкивался с ошибками, о которых вы говорите при использовании app_offline.htm. Он всегда правильно функционировал, чтобы снять сайт; Даже для прямых ссылок на страницы. Я предполагаю, что здесь может быть что -то еще. И я использовал IIS 7 и 7.5 (2008 R2) с ним.

Обновить
Просто посмотрел в нашу конфигурацию. У нас есть APP_OFFLINE.HTM, нанесенный на карту как главный документ по умолчанию на наших серверах. Это может быть смягчающим фактором.

Мне нравится идея использования «автономного» веб -приложения, в то время как ваше реальное веб -приложение не в автономном режиме. Вы установите символическую ссылку на свой веб -каталог, чтобы указать на соответствующее приложение.

Ваша настройка может выглядеть следующим образом:

Web_dir (это каталог, который IIS обслуживает www.yourdomain.com с)
Веб -ап

  • Фактическаявея
  • OfflineWebapp

Сценарий: ваше приложение онлайн
Web_dir -> actulwebapp (web_dir связан с ActualWebApp)

Сценарий: Ваше приложение не в автономном режиме
Web_dir -> offlinewebapp (web_dir связан с OfflineWebApp)


По сути, вы получаете два разных веб -приложения: реальное веб -приложение и «автономное» веб -приложение. Это дает вам гибкость перенаправления пользователей на другой сайт, но поддерживает внешний вид вашего домена-потому что это так!

Фактическое веб -приложение - это реальное веб -приложение. Это тот, который вы вносите, и тот, который имеет ваш фактический контент.

В веб -приложении «автономного» очень мало контента. Может быть, он содержит только статическую страницу, которую вы упомянули в своем вопросе. Возможно, у него есть некоторая маршрутизация для обработки любого запроса страницы, отображения автономного сообщения и перезагрузить каждую минуту.

Ваш веб -каталог IIS на самом деле является ссылкой на одно из этих двух веб -приложений. Обычно это будет связано с вашим реальным веб -приложением. Когда вы будете готовы начать (повторно) развертывание вашего веб -приложения, вы измените свой веб -каталог, чтобы указать вместо этого на приложение «автономный». После завершения развертывания вы снова измените ссылку, чтобы она снова указывала на реальное веб -приложение.

Я не думаю, что app_offline.htm был намеревался Для производства.

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

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

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

Надеюсь это поможет.

В нашем случае app_offline.htm не работал, пока мы не прокомментировали раздел нашей страницы Web.Config. С некомментированным, он будет перенаправлен на страницу ошибки, которую мы определили вместо APP_OFFLINE.HTM, как и ожидалось.

Старый пост, я знаю, но я еще не видел этого:

  1. Создайте новый сайт с App_offline.htm.
  2. Добавьте app_offline.html на сайт, который обновляется.
  3. Удалите привязку с сайта, который обновляется.
  4. Добавьте привязку к сайту Appoffline.
  5. Добавьте специальную привязку к целевому сайту (используя порт # или какой -либо другой URL -адрес тщеславия, IP -фильтрация или что -то еще, что вам нужно.)
  6. Сделайте проверку на целевом сайте.
  7. Восстановите привязку от Appoffline на целевой сайт.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top