Ho un servizio Windows personalizzato che eseguo su un numero di VM Hyper-V. Le macchine virtuali vengono riavviate un paio di volte all'ora come parte di alcuni test automatici in esecuzione. Il servizio è impostato su avvio automatico e quasi tutto il tempo, si avvia bene."Un timeout è stato raggiunto mentre si attende la connessione del servizio" errore dopo il riavvio
Tuttavia, forse il 5% delle volte, senza alcun motivo che riesco a distinguere, il servizio non riesce ad avviarsi. In caso di errore, viene visualizzato un errore nel Visualizzatore eventi che indica
È stato raggiunto un timeout (30000 millisecondi) durante l'attesa del collegamento del servizio My Name Name.
In questo caso, posso avviare manualmente il servizio o riavviarlo e il servizio verrà avviato correttamente.
La cosa che non riesco a capire è che il timeout di 30 secondi non sembra essere presente nel mio codice. La prima riga del metodo OnStart() della mia classe di servizio registra "Starting ..." nel suo log log4net. Quando il servizio non si avvia, non riesco nemmeno a registrare nulla, il che mi indica che log4net non può accedere per qualsiasi motivo, o il timeout si verifica prima che il mio OnStart() venga chiamato.
Il servizio viene eseguito su una varietà di sistemi operativi, da XP fino a Win7 e 2008R2, e so che impostare il servizio su avvio ritardato può risolvere questo per Vista e successivi, ma sembra un trucco.
Non sono stato in grado di eseguire il debug remoto a causa del fatto che accade in modo intermittente e durante l'avvio del sistema, e sono in perdita per ulteriori modi per cercare di capire cosa sta succedendo. Qualche idea?
Il servizio dipende da altri servizi o i servizi dipendono dal servizio per iniziare? –
No, è completamente autonomo. –
Che tipo di appender stai usando per log4net? –