Вероятно, домены приложений помогут в этом сценарии? - PullRequest
2 голосов
/ 18 сентября 2009

У меня есть процесс dotnet, который через вызовы неуправляемой dll связывается с процессом Java.

При некоторых обстоятельствах Java-процесс завершается сбоем, и мой процесс dotnet прекращается. Никаких исключений не возникает, процесс просто умирает. После сбоя java создает файл журнала с такими именами, как «hs_err_pid3228» и т. Д.

Не получив никакого удовлетворения от поставщика, который предоставляет неуправляемый dll и процесс java, я ограничен попыткой смягчить проблему, которая потребовала бы обеспечения вызовов в процесс java, если они терпят крах, не принимают вниз мой процесс.

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

У кого-нибудь была подобная проблема? Этот подход кажется разумным для тех из вас, у кого больше опыта работы с appdomain?

Чтобы сделать его еще более увлекательным, аварийное завершение Java на самом деле не воспроизводимо - оно кажется очень случайным, и я все еще борюсь с тем, как я иду на ТЕСТ, разделяющий на домен приложения

Ответы [ 2 ]

1 голос
/ 18 сентября 2009

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

В том же духе я однажды использовал AppDomains для создания одного приложения, которое наблюдало за тем, как происходит сбой, для создания отчетов об исключениях. Приложение запустилось само по себе, создало новый домен приложений, затем снова запустило себя в новом домене приложений, которое затем обнаружило, что оно работает в домене приложений и работает нормально. Когда происходит исключение в этом AppDomain, исходный процесс уведомляется, он обрабатывает дочерний домен, сообщает пользователю о произошедшей ошибке, спрашивает, хотят ли они сообщить об этом или нет, затем берет себя в руки и пробует все заново.

РЕДАКТИРОВАТЬ: Чтобы дать вам представление, если вы хотите посмотреть Program.cs для этого проекта, Я загрузил урезанную версию здесь . (Это довольно долго, поэтому я не думал, что я должен опубликовать это здесь.)

0 голосов
/ 18 сентября 2009

Да, использование доменов приложений имеет здесь большой смысл.

Недавно я переделал свою службу Windows, чтобы загружать ее различные службы WCF в качестве подключаемых модулей, которые работают в пределах своего собственного домена приложений. У меня есть несколько случаев в процессе начальной загрузки, когда я использую объекты MarshalByRefObject для запуска и запуска, но как только плагины загружены, связь между доменами приложений становится чрезвычайно простой с помощью WCF.

...