A recuperação do serviço não foi acionada no erro “Um limite de tempo foi atingido” para um serviço .NET?

1

Um serviço em C # que eu criei ocasionalmente não será iniciado automaticamente em VMs que estão inicializando - vemos a entrada "Um tempo limite foi atingido enquanto aguardava o serviço se conectar" no Log de Eventos.

O problema subjacente é o mesmo descrito em esta pergunta SO similar - mas a diferença aqui é que eu tenho opções de recuperação definidas no serviço para reiniciar o serviço em todas as falhas. No entanto, esse processo de recuperação não está sendo acionado - quando isso acontece, o serviço ainda deve ser iniciado manualmente após a conclusão da inicialização.

A opção Recuperação só é acionada em uma falha de serviço difícil e não em um tempo limite de inicialização?

Eu uso o log4net e vejo zero entradas de log quando isso acontece, por isso não estou confiante de que qualquer código meu esteja sendo executado antes que o tempo limite seja atingido (portanto, soluções para usar ou SetServiceStatus do WINAPI não teria efeito.

Supondo que isso seja algum problema subjacente com o .NET Framework ou similar sendo muito lento para iniciar (ou seja, recurso de sistema físico ou contenção de E / S como muitas VMs são inicializadas simultaneamente), eu precisarei criar um C ++ leve? serviço watchdog-type para detectar este problema e tentar reiniciar o serviço após o fato?

Mais detalhes: Este serviço estava em uma VM que foi reinicializada duas vezes para instalar as atualizações do Windows. O serviço inicializou bem após a primeira reinicialização - com base nas instruções de log, havia ~ 1 segundo entre o construtor de serviços em execução e o início do manipulador OnStart, e o serviço terminava de ser inicializado em mais dois segundos. Na segunda reinicialização, não havia entradas de log, apenas o log de eventos "Um tempo limite foi atingido" e, após a inspeção, o serviço não estava sendo executado. Um serviço .NET separado, mas semelhante, que foi iniciado com sucesso após as duas reinicializações demorou muito mais tempo na segunda vez - novamente com base nas instruções de log, ~ 0,7 segundo após a primeira reinicialização e 6 segundos após a segunda.

( perguntado originalmente no StackOverflow , foi recomendado que eu pergunte aqui)

    
por Ryan Barton 16.11.2012 / 19:49

0 respostas