Как динамически исправить работающее приложение ASP.NET? - PullRequest
5 голосов
/ 18 июля 2009

У кого-нибудь есть пример того, как пропатчить работающее приложение asp.net? Сценарий, который я представляю, заключается в том, что приложение может искать известный центральный сервер для более новых версий. Загрузите новые файлы во временную папку, а затем исправьте себя.

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

Ответы [ 5 ]

3 голосов
/ 18 июля 2009

Если вы не просматриваете определенные файлы, вы можете обновить существующие aspx-файлы без замедления работы приложения. В следующий раз, когда пользователь обновит браузер, он увидит обновление страницы. Будьте осторожны, если вы добавили дополнительные элементы управления сервером на страницу, а DLL еще не обновлена, у вас возникнут проблемы.

Если вы обновите файлы web.config или DLL для приложения, это вызовет перезагрузку рабочего процесса ASPNET, и у всех новых пользователей будет «первое отставание», которое вы обычно ожидаете.

Если вы беспокоитесь об этом процессе и можете позволить себе немного «простоя», я бы предложил вам создать скрипт, который выполняет следующие действия:

  1. Загрузите файл с именем App_Offline.htm в корневой каталог веб-приложения. IIS немедленно увидит этот файл и перенаправит к нему пользователей, а не обработает .NET. Вы даже можете сохранить файл с именем App_Offline_Disabled.htm в корневой папке и просто переименовать его, когда придет время.

  2. Скопируйте все свои файлы, которые необходимо обновить, переписав / переименовав / скопировав, если необходимо.

  3. Удалите (или переименуйте) файл App_Offline.htm, чтобы IIS начал перенаправлять пользователей в обновленное приложение. Если вы наблюдаете за запуском сценария, вы можете даже зайти на веб-сайт, чтобы взять штраф за «первую загрузку», чтобы ваши конечные пользователи увидели все красиво и свежо, как всегда.

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

3 голосов
/ 18 июля 2009

Что вы подразумеваете под исправлениями?

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

0 голосов
/ 18 июля 2009

Если кто-то еще не может использовать трюк app_offline.htm, я нашел эту статью, в которой объясняется, как отключить мониторинг файлов для подпапок

http://www.dominicpettifer.co.uk/Blog/36/stop-iis-appdomain-restarts-when-a-folder-is-deleted

0 голосов
/ 18 июля 2009

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

0 голосов
/ 18 июля 2009

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

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

...