Правильный способ обновления приложения RemoteAPP с помощью NGEN
У нас есть приложение RemoteAPP.NET 4.5 для Windows2008R2 NGEN-ed на сервере RDS, прибл. 300 одновременных пользователей для кластера NLB с 3 хостами.
Приложение находится в активной разработке, а развернутые сборки RemoteAPP должны быть обновлены (например, заменены новыми) довольно часто.
Как мы сейчас это делаем:
- Переименуйте файлы, которые нужно изменить на сервере RemoteAPP, с подключенными к ним пользователями (ОС не разрешит перезаписывать файлы, если они загружены),
- Пишите новые файлы вместо старых,
- NGEN устанавливает новые сборки (без первой деинсталляции старых!),
- Уведомлять пользователей (через приложение) о том, что версия приложения была изменена, и ее необходимо перезапустить,
- Постепенно разрешить пользователям перезагружать приложение в своем темпе (одновременный перезапуск приложения приведет к увеличению загрузки дисков и ЦП, что приведет к ухудшению производительности сервера).
И так для всех хостов в кластере.
После этого сервер иногда будет синим экраном с критической ошибкой Microsoft-Windows-Kernel-Power EventID 41, и я очень виню нашу практику обновления, чтобы нести за нее ответственность.
Следовательно, вопрос: какой рекомендуемый способ обновления приложения RemoteAPP и NGEN-сборка новых сборок без необходимости завершения процессов, обращающихся к старым сборкам (то есть разрешить пользователям продолжать и перезапускать, когда они захотят).
Спасибо.
Ответы
Ответ 1
Я рекомендую ускорить ваши веб-приложения, используя новый "Модуль инициализации приложений для IIS 7.5" и "Инициализация приложений", встроенный в IIS 8 вместо ngen.
Заявки на веб-сайт Microsoft: Инициализация приложений IIS для IIS 7.5 позволяет администраторам веб-сайтов улучшать отзывчивость своих веб-сайтов, загружая веб-приложения до поступления первого запроса.
Ссылка:
http://weblog.west-wind.com/posts/2013/Oct/02/Use-IIS-Application-Initialization-for-keeping-ASPNET-Apps-alive
Ответ 2
Вы можете использовать стартовое приложение, которое публикуется через RemoteApp. Стартер, в свою очередь, запустит последнюю версию приложения.
Ex: есть раздел реестра, который является путем перехода к последней версии вашего приложения.
- Добавить новую папку
C:\Program Files\myApp\1.0.26\
-
ngen
новые сборки
- Обновить раздел реестра, чтобы указать на новую папку
- Launcher, при запуске, запускает новую версию приложения
- При желании удалите старую версию, если она больше не используется
RemoteApp указывает на C:\Program Files\myApp\startApp.exe
startApp.exe
начинается 1.0.26\theApp.exe