J'ai une application qui gère le traitement lourd pour mon projet et doit le convertir en "Service Windows". Je dois permettre d'exécuter plusieurs versions Je peux voir au moins trois approches pour le faire: p>
Mon intention était une approche n ° 1, mais j'ai continué à trébucher sur les limitations, à la fois dans la conception et en particulier la documentation pour Services EM>: P>
Alors, les questions: p>
Remarque: EM> Je suis à l'échelle du problème en utilisant l'approche n ° 3, je ne peux donc pas justifier beaucoup de temps à comprendre. Mais je pensais que quelqu'un pourrait avoir des informations sur la manière de mettre en œuvre # 1 - ou de bonnes raisons pour lesquelles ce n'est pas une bonne idée. P>
Toutefois, à moins que l'application ne soit recompilée, elle doit définir de manière dynamique son servicon, donc qui a la solution à la troisième balle / problème ci-dessus. Ainsi, sauf si une instance nécessaire pour modifier ses fichiers d'installation, # 1 devrait fonctionner correctement avec n em> de fichiers de configuration dans le répertoire et une entrée de registre indiquant que l'instance doit utiliser. P>
3 Réponses :
Bien que je ne puisse pas répondre à vos questions spécifiques à l'option n ° 1, je peux vous dire que l'option n ° 2 a très bien fonctionné pour nous. Nous voulions créer un domaine d'application pour chaque service «enfant» à exécuter sous et pour chacun d'entre eux d'utiliser un fichier de configuration différent. Dans le fichier de configuration de notre service, nous avons enregistré les domaines de l'application pour démarrer et le fichier de configuration à utiliser. Donc, pour chaque entrée, nous avons simplement créé le domaine de l'application, définissez le fichier de configuration, etc., nous sommes allés. Cette séparation de la configuration nous a permis de spécifier facilement les emplacements des ports et des fichiers journaux uniquement pour chaque instance. Des avantages supplémentaires pour nous, c'est que nous avons écrit notre «service enfant» comme une ligne de commande EXE et appelé simplement l'exécuté d'AppDomain () sur un nouveau fil pour chaque service «enfant». La seule "clique" de la solution a été arrêtée, nous n'avions pas la peine de créer une "bonne" solution pour cela. P>
Il y a quelque temps, nous avons commencé à utiliser des services «nommés» (comme SQL Server). J'ai détaillé tout le processus sur mon blog dans une série "Construire un service Windows - Partie 1 via Partie 7 ". Ils vous prennent en créant un service de ligne de commande / Windows Hybrid complet avec une auto-installation. Les objectifs suivants où se sont rencontrés: p>
Un modèle complet de projet Visual Studio est disponible dans le dernier article de la série Construction d'un service Windows - Partie 7: Touches de finition . P>
Consultez cette sortie: Multiple Instance Windows Service P >
C'est la solution "Installer une application multiple" ".
Il y a l'option n ° 4 que j'utilise avec succès dans mon projet aka "Instances nommées". P>
Chaque installation de votre application a un nom personnalisé et chaque installation a son propre service. Ils sont complètement indépendants et isolés les uns des autres. MS SQL Server utilise ce modèle si vous essayez de l'installer plusieurs fois sur une seule machine. P>
En fait, cela ne consiste pas simplement à ajouter des instances Service i>, mais ajoute Installations i> chacune avec un autre nom de serviconf. Mais étant donné que cette approche résout le problème "ServiceName de jeu de dynamisme" que j'ai frappé, cela signifie que # 1 peut être fait. Cependant, il me semble que # 1 serait plus facile (si seulement pour l'utilisateur final) - installer simplement les fichiers / l'emballage une fois, puis installez plusieurs services à partir de celui-ci. présumer les instances ne nécessite pas de différences étendues dans les fichiers dans le répertoire d'installation i>
Je sais mais vous avez dit que vous avez besoin de plus de services car il existe éventuellement plusieurs versions de votre application. Pourquoi rendre les choses compliquées en dégageant toutes les versions dans un seul dossier. Si vous supposez que toutes vos versions seront compatibles à l'avenir avec ce qui se trouve dans votre répertoire d'installation unique, allez-y, mais c'est une chose dangereuse pour assumer quelque chose dans le développement de logiciels à moins que cela ne soit basé sur une base mathématique solide et ce n'est pas le cas: )
Désolé de vous déranger, j'ai eu une faute de frappe: je voulais dire plusieurs instance i> de la même version la même version i>, pas "plusieurs versions", comme je l'ai initialement indiqué. Il n'y aura jamais plus d'une version installée.