La plus simple manière de développer déboguer un service Windows
Je suis le développement d'un Service Windows dans VB.NET en 2008, mais je sens que je vais avoir un anévrisme. Pour déboguer le service, j'ai ajouté 15 secondes d'attente pour le code d'initialisation, ce qui me donne le temps de démarrer le service et fixez l' .NET débogueur avant que quelque chose arrive, afin que je puisse frapper les points d'arrêt et tels. Je manque vraiment "intégré" débogage avec ce type de solution de contournement, et des tests semble être un immense douleur.
Quelle est la meilleure façon de le faire "régulière" mise au point d'un Service Windows qui est en développement? Une option que j'avais envisagée était de déplacer toutes mes logique pour un projet de DLL, ne laissant que la logique de contrôle dans le service lui-même, et ensuite, la création d'un projet de Formulaires que l'essentiel, juste eu le "start" et "stop" de boutons sur elle, et l'a appelé dans la DLL de faire tout le reste. De cette façon, je peux déboguer mon code normalement, et puis il suffit de déployer le service compilé lors de la Dll sont prêts.
Est-il logique/importuner les autres? Je suis ouvert à toutes les solutions disponibles. PB suggestion ici sonne comme ce que je demande, - personne n'a utilisé cette approche?
OriginalL'auteur SqlRyan | 2009-07-14
Vous devez vous connecter pour publier un commentaire.
🙂
Euh, peut-être que ma tête est épais? J'ai ajouté Débogueur.Pause() la première ligne dans OnStart(), et démarrer le service. Maintenant j'ai une barre de progression en disant qu'il est de commencer. Puis de VS joindre à la procédure en est répertorié, mais en grisé, je ne suis pas en mesure d'attacher le débogueur. Ai-je raté quelque chose?
OriginalL'auteur leppie
Si vous pouvez gérer un peu de C#, c'est la façon dont je le fais.
En supposant que vous avez une classe MainService dérivé de ServiceBase avec une Méthode onStart puis, lorsqu'il n'est pas exécuté à l'intérieur du débogueur, le service démarre normalement, sinon le démarrage est appelé manuellement qui exécute le code en mode console.
Oui, c'est l'Application de la Console.
+1 - pour l'essentiel, la seule façon est de ne PAS AVOIR DE SERVICE au cours du développement / débogage et de l'onu, à partir d'une ligne de cmd application. Un Service lui-même est une douleur à déboguer.
OriginalL'auteur sgmoore
En dehors de l'utilisation du Débogueur.Pause(), dont plusieurs d'autres l'ont déjà mentionné, j'écris tous mes code de service dans une autre assemblée, à la véritable projet de service windows lui-même. Je puis aussi écrire une console windows app qui appelle le même code de service. Cela me permet de débogage dans l'IDE juste en mettant la console app comme projet de démarrage.
Le projet de service windows et la console windows application eux-mêmes, littéralement, ne rien faire, sauf appel au service "de base" du code, de sorte que le champ d'application pour les défauts dus à des différences entre le service et l'application de console sont minimes.
OriginalL'auteur Rob Levine
Quand je développe un service Windows à l'aide .NET, je profite de tests unitaires plus TypeMock pour que je puisse exécuter le code du service dans une unité de test, sans avoir à se joindre à une instance en cours d'exécution du service. D'autres se moquant de cadres vous pourriez chercher à inclure Rhino Se Moque De.
Donc mon plan était d'utiliser MSTest pour créer le projet de tests unitaires et de tester des méthodes qui vont à l'encontre de mon service, et à tout moment de l'exécution des dépendances seraient traitées par TypeMock, qui permettrait de créer des objets fantaisie pour mon service à utiliser. Donc, si mon service était de la manipulation des trucs à faire avec des fichiers, par exemple, je pourrais créer une maquette de fichier, à l'aide de TypeMock, et de l'utiliser dans mon unité de test à passer pour le service.
Dans le passé, je suis allé à travers la douleur de la compilation du service, l'installation, l'exécution d'elle et de l'attachement, etc. Quand j'ai découvert les cadres fictifs, c'était un grand sentiment de pouvoir tester mon code avec un simple clic d'un bouton à partir de l'IDE de Visual Studio.
Lui donner un essai.
OriginalL'auteur Jason Evans
Une autre façon est d'aller pour service1.le concepteur.vb fichier, recherchez et "encapsuler" la méthode suivante de code comme ceci:
Espérons que cette aide pour ceux programmeurs avec le code existant là 😉
Les crédits vont à un autre programmeur, qui a enseigné à moi.
OriginalL'auteur samslevin
J'ai construit un Service WCF qui s'exécute comme une application en Ligne de Commande avec un .Extension EXE. Cela me permet de charger l'application facilement en debug ou en dehors de VS simplement en double-cliquant dessus. J'ai ensuite un autre projet qui est un Service Windows Hôte et a une référence à mon Service WCF projet. Le Service Hôte peut gérer l' .exe fichier de la même manière qu'un .dll fichier.
Cela pourrait avoir des questions que je n'ai pas connu donc je ne peux pas le recommander comme une "best practice", mais il fonctionne très bien pour moi et résout les problèmes auxquels vous êtes confrontés.
Service.Start()
, attend la frappe d'une touche (ou quelque chose) puis appelleService.Stop()
. Ainsi, permettre à presque tout le code pour être débogué.OriginalL'auteur Chris Porter
J'écris mes services windows comme une application console, puis il suffit de déplacer le code d'initialisation de main à l'Service_Start de commande. Cela fonctionne pour la plupart des services. Vous pouvez toujours tester le Démarrage/Arrêt de la fonctionnalité d'un service grâce à une application console.
OriginalL'auteur BillRob
Comme leppie et d'autres l'ont dit, y compris PB suggestion, utilisation:
Mais aussi rappelez-vous que une fois que le service est en cours d'exécution, vous pouvez joindre VS.NET pour l'exécution de processus de service et de définir des points d'arrêt. Bien sûr, si le code du point d'arrêt se fait frapper automatiquement, vous aurez besoin d'attacher rapidement, mais dans mon cas, mon service traite les demandes, donc je joindre le service et de déclencher la demande.
OriginalL'auteur slolife
Lire Débogage d'un .Net Windows Service de la "voie facile". Dans cet article, Mark Pearce décrit comment déboguer un .Net service Windows à partir de Visual Studio. Essentiellement, il se résume à de l'extrait de code suivant, mais lisez l'article pour la solution complète.
OriginalL'auteur M P