Обслуживание HTTP-запросов от вторичного AppDomain или предотвращение перезапусков приложений при обновлении DLL
Я ищу решение, которое позволило бы мне обновить сайт asp.net новыми страницами, которые определены в различных сборках без выгрузки основного домена приложения (то есть xcopy to / bin не будет работать).
Хотя перекрестный вызов домена приложения кажется мне совершенно ясным, можно ли "предоставить" System.Web.UI.Page, находящийся в другом домене приложения, для домена приложения, обслуживающего запросы ASP.NET?
Поиск среди поставщиков сборки, поставщиков виртуальных путей и доменов приложений заставляет меня задуматься о том, что перезапуск основного домена приложения может быть незначительным по сравнению с усилиями и потенциальной нестабильностью любых вторичных реализаций домена приложения или пользовательского поставщика построения.
Спасибо за ваши идеи!
1 ответ
Я не думаю, что это так обременительно, как вы подозреваете. Я работал с перекрестным вызовом AppDomain для надстройки Outlook, чтобы динамически загружать разные версии, и ничего особенного в этом не было. Я не делал этого в ASP.NET, поэтому не знаю, в какие ловушки вы можете попасть туда.
Лично я бы изучил два варианта:
- Нажмите точку останова на событии Page_Load и проверьте трассировку стека. Посмотрите вызов System.Web.dll - IExecutionStep.Execute(), какие шаги в вашей DLL веб-приложений? Что-то дальше вниз по стеку зарегистрировало или иным образом определило, какой класс Page будет обрабатывать запрос. Трюк? подорвать стандартное поведение (извините, не уверен, где и как, но я смутно припоминаю, что когда-то читал что-то об этом).
- Подвергайте / обходите больше веб-конвейера, внедрив модуль для явной обработки ваших запросов.
Редактировать: Чтобы уточнить вариант 1, я подумал о классе PageHandlerFactory. http://msdn.microsoft.com/en-us/library/system.web.ui.pagehandlerfactory.aspx Особый интерес в статье представляет комментарий " Чтобы создать фабрику обработчиков пользовательских страниц, внедрите IHttpHandlerFactory и зарегистрируйте пользовательские". Класс PageHandlerFactory в файле Web.config для приложения в разделе конфигурации элемента httpHandlers (схема настроек ASP.NET). "
Другими словами, если вы реализуете свой собственный PageHandlerFactory, вы должны иметь возможность обрабатывать запросы страниц так, как вам хочется, включая передачу запросов другому домену приложения.