L'enveloppant d'un C# service dans une application console de débogage
Je veux déboguer un service écrit en C# et à l'ancienne est tout simplement trop long. Je dois arrêter le service, démarrage de mon application qui utilise le service en mode debug (Visual studio 2008), démarrer le service, fixez-le à l'opération de service et ensuite naviguer dans mon Asp.Net application pour déclencher le service.
J'ai pratiquement le service en cours d'exécution en arrière-plan, dans l'attente d'une tâche. L'application web sera le déclencheur d'une tâche pour être ramassés par le service.
Ce que je voudrais faire c'est d'avoir une application console qui déclenche le service dans un effort pour moi de débogage. Est-il une simple démonstration que tout le monde connaît?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez faire quelque chose comme ceci dans le point d'entrée principal:
et dans votre gestionnaire d'Événements de Démarrage:
L'approche que je prends toujours est d'isoler la totalité de la logique de votre application dans les bibliothèques de classes. Cela rend votre projet de service vraiment juste une coquille qui héberge vos bibliothèques de classes en tant que service.
En faisant cela, vous pouvez facilement unité de tester et de déboguer votre code, sans avoir à traiter avec le mal de tête de débogage d'un service en l'attachant à un processus. Je vous recommande de tests unitaires, bien sûr, mais si vous ne faites pas que l'ajout d'une application console qui appelle le même point d'entrée que votre service est le chemin à parcourir.
Pour éviter d'utiliser mondiale définit en général, je test au moment de l'exécution si je suis d'un service ou d'une application régulière par le biais de l'Environnement.UserInteractive propriété.
Vous pourriez vouloir vérifier TopShelf ainsi dans vos aventures.
http://codebetter.com/blogs/dru.sellers/archive/2009/01/11/topshelf.aspx
http://code.google.com/p/topshelf/
TopShelf est un autre projet qui est parfait pour cette approche. Il vous permet d'exécuter un processus, comme un service, ou comme une application console avec une configuration minimale.
Vous pouvez appeler les méthodes de service via la réflexion comme on le voit ci-dessous.
À l'aide de
Environment.UserInteractive
nous permet de savoir si l'on exécute comme une application console ou en tant que service.J'ai tendance à avoir soit un paramètre de configuration ou de l'utilisation d'une directive pour les versions de débogage:
ou
Je l'ai mis dans la méthode OnStart de la composante de service. Ensuite, vous êtes invité automatiquement attaché au processus.
Ici est un post de blog sur l'exécution de votre service windows comme une application console.
Vous pourriez tout aussi bien créer une nouvelle Application Console qui fait référence à la même logique que votre service à des méthodes d'essai, ou mettre en place des Tests Unitaires sur vos services " logique
J'ai utilisé des tests unitaires pour déboguer difficile configurations dans le passé, il suffit d'écrire un test unitaire que les appels quelle que soit la méthode de service avec tout ce que les paramètres et mettre de débogage des points d'arrêt dans l'unité de test.
À l'aide de testdriven.net ou jetbrains testrunner la rend plus facile.
Je l'utilise pour vérifier si un processus est en cours d'exécution en tant que service ou pas.