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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top