AppDomain защищает от краха?
От: Alex Dav Россия  
Дата: 12.09.12 13:39
Оценка:
У меня в дополнительном AppDomain приложение выкидывает exception и крашит основное приложение, я почему то думал, что домены как раз придумали, что бы этого не случалось. Я не прав?
Re: AppDomain защищает от краха?
От: rumatavz  
Дата: 12.09.12 13:43
Оценка:
Здравствуйте, Alex Dav, Вы писали:

AD>У меня в дополнительном AppDomain приложение выкидывает exception и крашит основное приложение, я почему то думал, что домены как раз придумали, что бы этого не случалось. Я не прав?


Нет
Re: AppDomain защищает от краха?
От: vvlad.net  
Дата: 12.09.12 13:49
Оценка: 1 (1)
Здравствуйте, Alex Dav, Вы писали:

AD>У меня в дополнительном AppDomain приложение выкидывает exception и крашит основное приложение, я почему то думал, что домены как раз придумали, что бы этого не случалось. Я не прав?


Домены придумали для того, чтобы можно было перезапускать отдельные части приложения если они перешли в несогласованное состояние.
Например, перезапуск плагина, после того как он закрешился (ессно надо обрабатывать исключение в основном приложении) и все его статические мемберы теперь стали неюзабельным мусором.
Re[2]: AppDomain защищает от краха?
От: matumba  
Дата: 12.09.12 13:58
Оценка:
Здравствуйте, rumatavz, Вы писали:
R>Нет

Здравствуйте, vvlad.net, Вы писали:
VN>Домены придумали для того, чтобы можно было перезапускать отдельные части приложения если они перешли в несогласованное состояние.

Ребят, а ничо, что вы тут ерунду несёте? Ну, по кр. мере несогласованную с основной документацией:

Application domains, which are represented by AppDomain objects, help provide isolation, unloading, and security boundaries for executing managed code.
Use application domains to isolate tasks that might bring down a process.

Если уж как-то понимать слово "изоляция", то уж точно именно в стиле "нам пофиг иксепшены другого домена".
Re[3]: AppDomain защищает от краха?
От: matumba  
Дата: 12.09.12 14:19
Оценка: 1 (1)
Здравствуйте, matumba, Вы писали:

M>Если уж как-то понимать слово "изоляция", то уж точно именно в стиле "нам пофиг иксепшены другого домена".


Ндя... похоже это я ерунду несу (извиняюсь ответчикам): всю жизнь думал, что домен — надёжная изоляция кода, а оказывается вот:

"AppDomain.UnhandledException Event" —
This event provides notification of uncaught exceptions. It allows the application to log information about the exception before the system default handler reports the exception to the user and terminates the application.

Другими словами, если ты иксепшын домена не ловил, он завалит всё остальное. Ндя... я был лучшего мнения о программерах мелкософта!
Re[4]: AppDomain защищает от краха?
От: Alex Dav Россия  
Дата: 12.09.12 14:27
Оценка:
Здравствуйте, matumba, Вы писали:

M>...всю жизнь думал, что домен — надёжная изоляция кода, а оказывается вот:

Вот и я вчера на этом попался — везде читал, что если вдруг бах в доп. домене, то главное приложение живет, а оказалось надо еще потанцевать.

А что будет, если доп. домен вообще не кинул exception? просто взял и "закрылся"?
Re[4]: AppDomain защищает от краха?
От: vvlad.net  
Дата: 12.09.12 14:50
Оценка:
Здравствуйте, matumba, Вы писали:

M>Здравствуйте, matumba, Вы писали:


M>>Если уж как-то понимать слово "изоляция", то уж точно именно в стиле "нам пофиг иксепшены другого домена".


M>Ндя... похоже это я ерунду несу (извиняюсь ответчикам): всю жизнь думал, что домен — надёжная изоляция кода, а оказывается вот:


M>"AppDomain.UnhandledException Event" —

M>This event provides notification of uncaught exceptions. It allows the application to log information about the exception before the system default handler reports the exception to the user and terminates the application.

M>Другими словами, если ты иксепшын домена не ловил, он завалит всё остальное. Ндя... я был лучшего мнения о программерах мелкософта!


Ну так изоляция данных — это и есть первая причина введения доменов, тут ты прав. Но домен не изолирует потоки, поэтому исключения проходят сквозь домены беспрепятственно (ибо к данным не относятся).
Re[5]: AppDomain защищает от краха?
От: vvlad.net  
Дата: 12.09.12 14:54
Оценка: 1 (1)
Здравствуйте, Alex Dav, Вы писали:

AD>Здравствуйте, matumba, Вы писали:


M>>...всю жизнь думал, что домен — надёжная изоляция кода, а оказывается вот:

AD>Вот и я вчера на этом попался — везде читал, что если вдруг бах в доп. домене, то главное приложение живет, а оказалось надо еще потанцевать.

AD>А что будет, если доп. домен вообще не кинул exception? просто взял и "закрылся"?


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

Кроме того, домен — это нее поток, а просто область данных, закрыться сам он не может, ибо не выполняется.
Re: AppDomain защищает от краха?
От: Sharov Россия  
Дата: 12.09.12 15:12
Оценка: 1 (1)
Здравствуйте, Alex Dav, Вы писали:

Вот здесь очень неплохо написано про домены.
Собственно, если я правильно понимаю, если приложение не должно падать в случае падения не основного(тот, который поумолчанию)
домена, но для этого надо такое поведение как-то грамотно обрабатывать. Подробнее можно почитать про плагинную архитектуру на
основе доменов.
Кодом людям нужно помогать!
Re[6]: AppDomain защищает от краха?
От: Alex Dav Россия  
Дата: 12.09.12 15:16
Оценка:
Здравствуйте, vvlad.net, Вы писали:

VN>Кроме того, домен — это нее поток, а просто область данных, закрыться сам он не может, ибо не выполняется.

Получается, если у меня в домене закрашится dll, то она завалит все приложение?
Re[2]: AppDomain защищает от краха?
От: Alex Dav Россия  
Дата: 12.09.12 15:17
Оценка:
Здравствуйте, Sharov, Вы писали:

S>Вот здесь очень неплохо написано про домены.

Спасибо.
Re[2]: AppDomain защищает от краха?
От: Sharov Россия  
Дата: 12.09.12 15:31
Оценка:
Здравствуйте, Sharov, Вы писали:

Вот, по-моему, ответ на Ваш вопрос.
Кодом людям нужно помогать!
Re[7]: AppDomain защищает от краха?
От: vvlad.net  
Дата: 12.09.12 17:39
Оценка: 30 (1) +2
Здравствуйте, Alex Dav, Вы писали:

AD>Здравствуйте, vvlad.net, Вы писали:


VN>>Кроме того, домен — это нее поток, а просто область данных, закрыться сам он не может, ибо не выполняется.

AD>Получается, если у меня в домене закрашится dll, то она завалит все приложение?

Нет — если ты перехватишь исключение.
try
{
  call to some function in other domain...
}
catch(Exception)
{
  failover...
}


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

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

К твоему вопросу:
— если dll бросает исключение, то домены это не разруливают.
— если dll после креша неюзабельна (ибо говнокод в глобальном состоянии dll) — то домены это разруливают. Делаешь unload и создаешь новый домен.
Re[5]: AppDomain защищает от краха?
От: matumba  
Дата: 13.09.12 14:46
Оценка:
Здравствуйте, vvlad.net, Вы писали:

VN>Ну так изоляция данных — это и есть первая причина введения доменов


Допустим. Но что вам подсказывает интуиция после вот этих слов? "Use application domains to isolate tasks that might bring down a process." — по-моему, тут "процесс" и относится именно к выполнению, а не данным. Мелкомягкие словопуты?
Re[6]: AppDomain защищает от краха?
От: Аноним  
Дата: 13.09.12 23:50
Оценка: +2
Здравствуйте, matumba, Вы писали:

VN>>Ну так изоляция данных — это и есть первая причина введения доменов


M>Допустим. Но что вам подсказывает интуиция после вот этих слов? "Use application domains to isolate tasks that might bring down a process." — по-моему, тут "процесс" и относится именно к выполнению, а не данным. Мелкомягкие словопуты?


В терминах win.api "process" всегда был именно областью данных. Когда крашился/завершался последний поток процесса — процесс выгружался. Тут дали sandbox — часть данных можно положить в отдельную кучку, которую можно целиком выбрасывать, когда там что-то сломается.

А что еще кроме данных можно "защищать"? Защищать потоки исполнения? Как вы это представляете? runtime-e поймав unhandled exception начинает думать: "тааак тут у меня поток освободился — что бы ему подсунуть на исполнение?"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.