2010-12-20 5 views
2

J'ai créé une application de service Windows à l'aide de Visual Studio .NET et C#. Ce service sera déployé sur quelques centaines de machines et je cherche un moyen solide de surveiller l'application. Par moniteur, je veux dire, je veux juste vérifier pour s'assurer qu'il fonctionne, et vérifier l'état de quelques paramètres sur chaque client.Surveillance d'un service Windows personnalisé

Existe-t-il une méthode commune pour cela?

+1

Pour gérer la surveillance, j'ai fini par écrire une application rails et la déployer sur heroku. C'était stupide simple et ça a bien fonctionné; pour environ 48 heures de toute façon .. –

Répondre

7

La chose la plus simple à faire est d'avoir chaque application "appel à la maison". Créez une application centrale unique, de préférence une application Web, et demandez aux applications distantes de faire un petit appel à l'application centrale sur l'intervalle que vous jugez nécessaire. Ils peuvent inclure les informations supplémentaires que vous souhaitez surveiller. Gardez une liste de l'emplacement de déploiement de l'application et si vous n'obtenez aucun appel de l'un des membres de la liste dans les délais impartis, alors vous savez que l'application est hors connexion.

Si vous ne pouvez pas modifier l'application que vous surveillez, créez une petite application complémentaire pouvant s'exécuter en tant que tâches planifiées et effectuer les mêmes vérifications locales et rappeler l'application centrale. Nous faisons cela avec des milliers de machines client dans le monde entier et cela fonctionne bien.

+0

C'est une bonne idée. Je n'aurais pas pensé à ça! – devlord

5

Vous pouvez écrire un petit programme utilitaire de surveillance qui vérifie l'état du service via le SCM et fournit une interface HTTP simple afin que vous puissiez interroger l'état. Ce serait simplement une grosse boucle avec quelques rapports si l'état du service change.

while (true) 
{ 
    string serviceName = "NameOfYourService"; 
    ServiceController Svc = new ServiceController(serviceName); 
    if (Svc.Status != ServiceControllerStatus.Running) 
    { 
     //Do reporting/set status here 
    } 
    Thread.Sleep(5000); 
} 
Questions connexes