Домены
От: igor-booch Россия  
Дата: 17.03.14 12:40
Оценка:
Вы когда нибудь пользовались созданием дополнительных доменов? Если да опишите вкратце зачем это Вам понадобилось и что из этого получилось.
Отвечайте на это сообщение, только если у Вас хорошее настроение и в Вашем ответе планируются только конструктивные вопросы и замечания
http://rsdn.ru/Info/rules.xml
Re: Домены
От: ykurin  
Дата: 17.03.14 12:58
Оценка: 4 (1)
Здравствуйте, igor-booch, Вы писали:

IB>Вы когда нибудь пользовались созданием дополнительных доменов? Если да опишите вкратце зачем это Вам понадобилось и что из этого получилось.


Пользовался. Пришлось использовать домен для загрузки плагинов.
Дело в том, что если загружать сборки в основной домен, то выгрузить их потом уже нельзя.
Поэтому создавался второй домен, туда грузились сборки, а по завершении убивался весь домен.
Re: Домены
От: Аноним  
Дата: 17.03.14 13:39
Оценка: 4 (1)
Здравствуйте, igor-booch, Вы писали:

IB>Вы когда нибудь пользовались созданием дополнительных доменов? Если да опишите вкратце зачем это Вам понадобилось и что из этого получилось.


Использовали для реализации скриптового языка в нашей программе.
Результат скармливался типам из System.CodeDom.Compiler (давно было, не помню точно) и в итоге у нас получался динамически созданный код, который можно было выполнять.
И тут две проблемы:

1) Когда скрипт выполнен (допустим, после набора очередной строчки кода) сгенерированные классы больше не нужны — всё это добро нужно выгрузить из памяти. Решение: выгружаем домен.

2) Мы не хотим, чтобы пользователь (или злоумышленник подсунуть ему) мог написать код форматирования диска или вызвать какие-то сторонние нативные компоненты и т.п. — эти и другие ограничения (много их было, все не помню) мы и можем задать для конкретного домена.

Грабли:
1) Иногда не удавалось выгрузить домен, код падал с ошибкой. Не помню почему, но вроде решил эту проблему. А может и проблемы такой не было.

2) С обработкой/пробросом исключений были проблемы — но решение, кажется, было стандартное.

3) Нужно заморачиваться с "маршалингом типов" или как это называется между доменами.

В общем как-то так.
Re: Домены
От: scale_tone Норвегия https://scale-tone.github.io/
Дата: 19.03.14 11:21
Оценка:
Здравствуйте, igor-booch, Вы писали:

IB>Если да опишите вкратце зачем это Вам понадобилось и что из этого получилось.


Есть такая штука — NServiceBus. У нее есть проблема — она рассчитана одновременно только на один вид транспорта. Т.е. в рамках одного процесса можно посылать/получать сообщения либо только по MSMQ, либо только по RabbitMQ etc. Это все потому, что все настройки, а также сам экземпляр шины — статические переменные.

Иногда нужно переложить сообщения из RabbitMQ, например, в Azure Queue.
Вот тогда приходится поднимать отдельный инстанс шины в отдельном AppDomain-е и маршализовать туда сообщения.
Получилось
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.