Question

Je dispose de plusieurs applications c # worker exécutant différentes tâches continues: envoi d’e-mails depuis la file d’attente, importation de nouvelles commandes de la base de données de sites Web vers la base de données de commandes, sauvegarde et restauration de bases de données, traitement de données pour OLTP - > OLAP et d’autres tâches connexes. Avant, je publiais ces services en tant que services Windows, mais je les publie actuellement en tant qu'applications de console standard. Ils sont tous basés sur un framework de gestion de tâches commun que j'ai créé, ce qui me satisfait, mais je ne suis pas sûr du meilleur moyen de déployer ces types d'applications. J'aime la version console car elle est rapide et facile, et il est possible de voir rapidement l'activité et les résultats du programme. L'inconvénient est que l'ordinateur de travail a plusieurs écrans de console en cours d'exécution et qu'il devient désordonné. D'autre part, la méthode de service semble trop longue à déployer et je dois consulter les journaux des événements pour voir les messages. Quelles sont certaines expériences / commentaires à ce sujet?

Était-ce utile?

La solution

J'aime l'approche de l'application console. Les choses sont généralement configurées pour pouvoir passer un commutateur comme -unattended qui supprime l'écran de la console.

Autres conseils

Le service Windows serait un bon choix, il fonctionne en arrière-plan, peu importe si vous fermez la session en cours, vous pouvez également le configurer pour qu'il démarre automatiquement après le redémarrage de Windows lors de la mise à jour des correctifs sur le serveur. Vous pouvez consigner des messages importants dans l'observateur d'événements ou dans la table de base de données.

Pour une chose comme cela, le moyen standard de le faire est avec les services Windows. Vous souhaitez que le service s'exécute sur le compte réseau afin de ne pas nécessiter d'utilisateur connecté.

J'ai travaillé il y a quelques années sur un projet présentant des problèmes similaires. Logiquement, j'avais besoin d'un service, mais parfois j'avais besoin de voir ce qui se passait et je voulais généralement une histoire. J'ai donc développé un service qui faisait le travail, chaque fois qu'il souhaitait se connecter, il appelait ses abonnés (mis en œuvre sous forme d'observateur).

Le service a enregistré son propre enregistreur de données (écriture dans une base de données) et au moment de l'exécution, l'utilisateur pouvait exécuter une interface graphique qui se connectait au service en utilisant l'accès distant pour devenir un écouteur en direct!

Je vais voter pour les services Windows. La gestion de ces applications pour consoles va devenir un véritable casse-tête.

Le déploiement du service Windows est simple: après l’installation initiale, il vous suffit de les désactiver et de réaliser un XCOPY. Pas besoin d'exécuter des installateurs compliqués. C'est seulement semi-compliqué la première fois, et même alors, c'est juste

installutil MyApp.exe

Configurez les services à exécuter sous un compte de domaine pour une sécurité optimale et une interopérabilité optimale avec d'autres machines.

Utilisez une combinaison de journaux des événements (avec Erreur, Avertissement et Information) pour les notifications importantes et transférez simplement la journalisation détaillée dans un fichier texte.

Pourquoi ne pas profiter du meilleur de tous les mondes et utiliser quelque chose du genre:
http://topshelf-project.com/

Il vous permettra d’exécuter votre programme en tant que ligne de commande ou service Windows.

Je ne sais pas si cela s'applique à vos applications ou non, mais lorsque j'ai certaines applications de la console qui ne dépendent pas des entrées de l'utilisateur ou qu'elles sont du genre d'applications qui ne font que leur travail et se quittent, j'exécute de tels programmes Sur un serveur virtuel, de cette manière, je ne vois pas d’écran apparaître lorsque je travaille, et les serveurs virtuels sont faciles à créer et à redémarrer.

Nous utilisons régulièrement les services Windows comme processus d’arrière-plan. Je n'aime pas les applications en ligne de commande, car vous devez être connecté au serveur pour pouvoir s'exécuter. Les services fonctionnent en arrière-plan tout le temps (en supposant qu'ils démarrent automatiquement). Il est également facile d'installer w / l'outil de ligne de commande sc.exe disponible dans Windows. Je l'aime mieux que le bloat-ware qui est installutil.exe. Bien sûr, installutil en fait plus, mais je n'ai pas besoin de ce qu'il fait. Je veux juste enregistrer mon service.

Nous avons également créé une infrastructure dans laquelle nous avons un service générique .exe qui charge les fichiers .DLL en fonction d'une définition d'interface. Nous avons donc ajouté un nouveau "service". est aussi simple que de déposer une nouvelle DLL et de redémarrer l’hôte du service.

Cependant, nous avons commencé à nous éloigner des services. Le problème que nous avons avec eux est qu'ils bloquent les DLL (pour des raisons évidentes), il est donc difficile de les mettre à niveau. Nous devons arrêter, mettre à niveau, puis redémarrer. Pas difficile, mais des étapes supplémentaires. Au lieu de cela, nous passons à des "pages" spéciales. dans nos applications asp.net qui exécutent les tâches en arrière-plan dont nous avons besoin. Il y a toujours un service, mais tout ce qu'il fait appelle les pages asp.net pour qu'il ne verrouille aucune de nos DLL. Ensuite, nous pouvons remplacer les DLL du répertoire bin asp.net et les règles normales asp.net pour le redémarrage du domaine d'application.

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