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