Страницы

Поиск по вопросам

пятница, 26 октября 2018 г.

Когда используются собственные домены приложений?

Прочитал про домены приложений и немного не понял, при каких обстоятельствах следует грузить сборки в отдельный домен.
Как я понял, по функционалу это похоже на стандартную динамическую загрузку библеотек(позднее связывание), но с одним отличием- домены изолированы между собой и для взаимодействия нужно использовать какой-либо протокол взаимодейсвтия (Например, WCF).
Я правильно понимаю, что это что-то типа: Приложения, которое содержит в себе N-ое кол-во других изолированных приложений?


Ответ

Есть несколько сценариев, при которых нужны домены.
Например, это выполнение кода непонятного происхождения. Если ваше приложение грузит плагин из интернета, то в нём может оказаться враждебный код. Вы можете вынести его в другой домен с урезанными правами, чтобы он не имел доступа к файловой системе, P/Invoke или рефлексии.
Далее, если код не злонамеренный, но просто «падучий», то опять-таки есть смысл выгрузить его в отдельный домен, чтобы при падении он не «утащил» за собой главное приложение.
Следующий сценарий упомянут @Alexander Petrov в комментарии: вы не можете выгрузить загруженную сборку, но можете выгрузить целый домен. Выгрузка сборки может быть нужна, чтобы удалить файл с ней (например, вы хотите загрузить новую версию плагина).
Ещё один сценарий — вы можете таким образом избавиться от очень большого статического объекта. (С точки зрения языка статический объект живёт вечно, но на самом деле он будет выгружен вместе с доменом.)

Комментариев нет:

Отправить комментарий