É provável AppDomains vai ajudar neste cenário?
Pergunta
Eu tenho um processo dotnet que através de chamadas para uma DLL não gerenciada está se comunicando com um processo Java.
Em algumas circunstâncias, o processo de Java parece ser batendo e tirando o meu processo de dotnet para baixo com ele. Sem exceções são levantadas, o processo simplesmente morre. Após a deixar de funcionar, java é a criação de um arquivo de log com nomes como "hs_err_pid3228" etc.
Não tendo recebido nenhuma satisfação do fornecedor que está fornecendo o dll não gerenciada e o processo de java, estou reduzido a tentar mitigar o problema que seria necessário garantir que as chamadas para o processo de java, se falhar, não tome no meu processo.
Tendo lido vários artigos, AppDomains parece um candidato provável para uso - sendo a minha teoria que posso com um pouco de trabalho separar a minha funcionalidade que chama o processo java e executá-lo em um appdomain separado, que esperamos, permita-me se não pegar o appdomain indo para baixo, pelo menos detectar que isso aconteceu e reiniciar essa funcionalidade.
Alguém já teve um tipo semelhante de questão? Será que essa abordagem parece razoável aqueles com mais experiência de appdomain?
Para torná-lo ainda mais divertido, o acidente Java não é realmente reprodutível - parece muito aleatório e ainda estou lutando com a forma como eu vou testar se separando no appdomain
Solução
Este é um uso razoável de AppDomains, e que se propõe irá funcionar.
Na mesma linha, uma vez eu AppDomains usado para criar um único aplicativo que observou por si só bater para fins de relatório de exceção. A aplicação começou-se para cima, criou um novo AppDomain, então a própria re-executados no novo AppDomain, que então detectado ele estava correndo em um AppDomain e executado normalmente. Quando uma exceção aconteceu naquele AppDomain, o processo original é notificado, ele derruba os relatórios domínio filho para o usuário que um erro ocorreu, pergunta se eles querem denunciar ou não, em seguida, escolheu-se para cima e tentou fazê-lo mais uma vez.
EDIT: Para lhe dar um avanço, se você quiser olhar para os Program.cs para esse projeto, Fiz upload de um despojado versão aqui . (É muito longa, então eu não acho que eu deveria publicá-la aqui.)
Outras dicas
Sim, AppDomains alavancando fazer muito sentido aqui.
Eu reformulado recentemente o meu serviço do Windows para carregar seus vários serviços WCF como plug-ins que operam dentro de seu próprio AppDomain. Eu tenho alguns casos no processo de inicialização onde eu estou usando MarshalByRefObject objetos para fazer as coisas a funcionar, mas uma vez que os plug-ins são carregados, a comunicação entre os AppDomains é extremamente fácil usando WCF.