Est-ce que le lancement d'une exception dans un service Windows bloque le service?lançant une exception dans un service Windows
à-dire qu'il devra être redémarré manuellement
Note: Je lance l'exception de l'intérieur de la clause catch.
Est-ce que le lancement d'une exception dans un service Windows bloque le service?lançant une exception dans un service Windows
à-dire qu'il devra être redémarré manuellement
Note: Je lance l'exception de l'intérieur de la clause catch.
Pas strictement - cela causerait seulement des problèmes si l'exception n'est pas gérée.
Si l'exception est uncaught et bulles de retour à la méthode OnStart() il se bloque le service. En général, vous verrez un message dans le journal des événements Windows similaire à ce qui suit:.
« Le service de Service MyServiceName terminé de manière inattendue Il a fait cette fois-x (s)
Si vous jetez l'exception. Catch, et il n'y a rien au-dessus pour le récupérer, cela provoquera l'arrêt de votre service.La méthode OnStart() nécessite un try/catch.Si vous ne voulez pas arrêter le service lorsqu'une exception survient, alors vous devez manipulez-le (consignez-le et passez dessus, ou autre)
Ma préférence serait de gérer les exceptions attendues, et d'avoir des exceptions inattendues, soit provoquer l'arrêt du service, soit au moins arrêter/redémarrer automatiquement. chose inattendue arrive votre service sera en cours d'exécution dans un état inconnu, et qui sait ce qu'il va faire.
Nous avons couru dans le problème d'une exception non piégée sur un thread enfant provoque l'arrêt du service sans fournir aucune information sur ce qui était à l'origine l'exception. Nous avons utilisé cette méthode pour trouver la source de l'exception.
Vous pouvez mettre un gestionnaire au service d'attraper toutes les exceptions non gérées (y compris toutes les discussions sous du service). Dans VB.NET, vous devrez ajouter un gestionnaire pour AppDomain.CurrentDomain.UnhandledException. Il est probablement similaire en C#. Il captera alors tout ce qui dépasse votre onStart. Vous pouvez choisir de le consommer ou de le laisser tomber à partir de là.
mon service tire d'un pool de threads, donc je pense que votre suggestion aidera merci. – Blankman
"Il est probablement similaire en C#" :) –
@Ronnie: Oui ... c'est triste qu'une telle déclaration soit faite ... –
J'ai enveloppé la méthode entière qui s'exécute quand le temporisateur s'écoule dans un essai/attraper, n'obtenant pas des erreurs pourtant mon service jamming! – Blankman
Que voulez-vous dire par "brouillage"? – bobwienholt
bob: Je veux dire qu'il arrête le traitement (en déplaçant des fichiers d'un dossier). – Blankman