Обслуживание HTTP-запросов от вторичного AppDomain или предотвращение перезапусков приложений при обновлении DLL - PullRequest
2 голосов
/ 16 марта 2012

Я ищу решение, которое позволило бы мне обновлять веб-сайт asp.net новыми страницами, которые определены в различных сборках без выгрузки основного домена приложения (т.е. xcopy to / bin не будет работать).

Несмотря на то, что перекрестный вызов домена приложения кажется мне совершенно ясным, можно ли было бы "предоставить" System.Web.UI.Page, находящийся в другом домене приложения, для домена приложения, обслуживающего запросы ASP.NET?

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

Спасибо за ваши идеи!

1 Ответ

0 голосов
/ 11 мая 2012

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

Лично я бы рассмотрел два варианта:

  1. Нажмитеточка останова на событии Page_Load и проверка трассировки стека.Посмотрите вызов System.Web.dll - IExecutionStep.Execute (), какие шаги в вашей DLL веб-приложений?Что-то дальше в стеке зарегистрировало или иным образом определило, какой класс Page будет обрабатывать запрос.Трюк?подорвать стандартное поведение (извините, не знаю, где и как, но я смутно припоминаю, что когда-то читал что-то об этом).
  2. Подвергайте / обходите больше веб-конвейера, реализуя модуль для явной обработки ваших запросов.

Редактировать: Чтобы уточнить вариант 1, я подумал о классе PageHandlerFactory.http://msdn.microsoft.com/en-us/library/system.web.ui.pagehandlerfactory.aspx Особый интерес в статье представляет комментарий " Чтобы построить фабрику обработчиков пользовательских страниц, реализуйте IHttpHandlerFactory и зарегистрируйте пользовательский класс PageHandlerFactory в файле Web.config для приложения в элементе httpHandlers (Раздел конфигурации схемы ASP.NET)."

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

...