Quel serait le meilleur moyen de conserver les paramètres modifiables par l'utilisateur pour un service Windows?

StackOverflow https://stackoverflow.com/questions/1202835

Question

Je développe une application qui sera implémentée en tant que service Windows et je me demandais quel serait le meilleur moyen de gérer les différents paramètres (). au niveau utilisateur et application). Le problème est que je ne connais pas encore toutes les options disponibles. Je privilégie donc en principe le System.Configuration de .NET (ConfigurationManager.RefreshSection (" appSettings ")). tentant), même si je n'arrive toujours pas à comprendre ce qui se passe, à savoir où se trouve le fichier app.config stocké pour un service donné, etc. "

Ma question est donc la suivante: quel serait le meilleur moyen de stocker des détails de configuration modifiables par l'utilisateur pour un service Windows donné? Merci à tous d’avance pour vos commentaires.

Était-ce utile?

La solution

Hmmm ... paramètres de configuration 'modifiables par l'utilisateur' pour un service Windows ...

Il est important de garder à l’esprit que le service Windows fonctionne en arrière-plan et qu’il ne permet donc pas aux utilisateurs d’interagir directement avec lui. Ce que j'ai fait pour contourner ce problème est de créer une application frontale distincte qui communique avec le service Windows à l'aide de WCF. De cette manière, les paramètres de configuration «modifiables par l'utilisateur» sont conservés dans les paramètres de l'application frontale, pas dans le service Windows. Les paramètres sont simplement communiqués au service Windows à l'aide d'une série de messages WCF au fur et à mesure que l'utilisateur les modifie.

Dans mon cas, j'ai même ajouté un NotifyIcon à mon application frontale et ajouté une logique pour que l'application puisse être supprimée de la barre des tâches lorsqu'elle est réduite. Il fonctionne de la même manière que le Gestionnaire des tâches lorsque vous activez l'option "Masquer lorsque réduit". Cela donne à l’utilisateur l’illusion d’interagir directement avec le service, même s’il s’agit de deux processus totalement indépendants.

EDIT:

En réponse à votre commentaire, WCF est simplement une API de messagerie. Les messages sont généralement définis en tant que classes décorées avec les attributs DataContract et DataMember. Les attributs ServiceContract et OperationContract définissent l'interface de service WCF. Une fois ceux-ci définis, il est facile de créer et d’héberger le service WCF dans votre service Windows. Et si vous utilisez Visual Studio 2008, la création du proxy côté client est un jeu d'enfant, car VS2008 peut l'automatiser pour vous.

Une fois que tout cela est fait, votre application frontale instancie simplement une instance du proxy côté client et appelle les méthodes sur ce proxy. Au fur et à mesure que chaque méthode est appelée, l'infrastructure WCF prend en charge la sérialisation et l'envoi du message au service WCF afin que celui-ci puisse agir. Il sérialise ensuite toute réponse, y compris les exceptions, au proxy. Du point de vue du côté client, par exemple votre application frontale, vous avez simplement appelé une fonction. C'est la beauté de la WCF! C'est très analogue à la programmation de socket, sauf que vous n'avez pas à gérer les connexions. WCF prend soin de toute cette tuyauterie pour vous.

Bien entendu, tout cela suppose que vous puissiez au moins utiliser .NET 3.0. Si vous utilisez Visual Studio 2008, vous êtes en forme. Voici quelques tutoriels pour vous aider à démarrer:

Une fois que vous avez compris les concepts de base, je vous recommanderais de consulter le site de Juval Lowy. Il y a beaucoup de téléchargements gratuits liés à la WCF que je trouve très utiles à regarder, bien que ce soit un peu plus avancé. Comprenez d'abord les concepts de la WCF avant d'aller trop loin.

Encore une fois, l’essentiel est d’aider vos utilisateurs à configurer divers aspects de votre service Windows. Si vous ne fournissez pas une interface graphique frontale pour le faire, je ne sais pas comment ils le feraient sans manipuler manuellement le fichier app.config lui-même.

J'espère que cela vous aidera.

Autres conseils

Si vous n'avez besoin que d'un dictionnaire de nom / valeur unique pour stocker vos paramètres de configuration, le fichier app.config est la réponse la plus simple. Dans votre solution, cela s'appelle "app.config", mais une fois construit, il est renommé en exécutable + ".config".

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top