Страницы

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

воскресенье, 15 декабря 2019 г.

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

#c_sharp #net


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

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

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


Ответы

Ответ 1



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

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

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