2010-10-21 8 views
0

J'ai actuellement un projet en cours qui consiste à créer un service Windows qui déplace essentiellement les fichiers sur plusieurs chemins. Un travail peut être, toutes les 60 secondes, obtenir tous les fichiers correspondant à une expression régulière d'un serveur FTP et les transférer vers un chemin réseau, et ainsi de suite. Ces tâches sont stockées dans une base de données SQL.Conseils et astuces pour un service Windows que je crée en C# et en Quartz.NET

Actuellement, le service prend la forme d'une application console, pour faciliter le développement. Les tâches sont ajoutées à l'aide d'une page ASP.NET et peuvent être modifiées à l'aide d'une autre page ASP.NET.

J'ai quelques problèmes cependant, certains concernant Quartz.NET et quelques problèmes généraux.

Quartz.NET:

1: C'est le plus gros problème que j'ai. Voyant que je développe l'application en tant qu'application console pour le moment, je dois créer un nouveau planificateur Quartz.NET sur tous mes fichiers/pages. Cela provoque plusieurs erreurs de confusion, mais je ne sais pas comment installer le planificateur dans un fichier global et y accéder dans mes pages ASP.NET (afin que je puisse obtenir des détails dans une vue de grille pour éditer, par exemple)

2: Mon manager m'a suggéré de chercher plusieurs configurations dans Quartz.NET. Par là, je veux dire qu'à un moment donné, un administrateur peut changer la configuration des applications afin que seules les applications spécifiquement choisies s'exécutent. Quel serait le moyen le plus simple de le faire dans Quartz.NET?

général:

1: Une chose que c'est crucial dans cette application est l'assurance que le dossier a été déplacé et il est en fait sur le chemin cible (après le déplacement du fichier d'origine est supprimé, il serait désastreux si le fichier est effacé quand il n'a pas été copié!). Je dois également m'assurer que le contenu des fichiers correspond au chemin d'accès initial et le chemin cible pour donner la tranquillité d'esprit que ce qui a été copié est correct. Je le fais actuellement en hachant MD5 le fichier initial, en copiant le fichier, et avant de le supprimer assurez-vous que le fichier existe sur le serveur. Ensuite, je hash le fichier sur le serveur et assurez-vous que les hachages correspondent. Y a-t-il une manière plus simple de faire ceci? Je crains que le hachage ne mette le système sous tension.

2: Ceci est lié à la question ci-dessus, mais ce n'est pas aussi important car même mon manager n'a aucune idée de comment je ferais cela, mais j'aimerais bien l'implémenter. Un problème se poserait si un travail est exécuté lors de l'écriture d'un fichier, ce qui peut être qu'un fichier à moitié écrit sera transféré, le rendant ainsi totalement inutile, et ce serait aussi mauvais que le fichier initial serait détruit pendant que c'est écrit à! Y a-t-il un moyen de vérifier cela?

Répondre

2

Comme vous l'avez découvert, l'exécution du planificateur Quartz dans un ASP.NET présente de nombreux problèmes. Découvrez la réponse de Marko Lahma à votre question sur l'exécution du planificateur à l'intérieur d'une application Web ASP.NET:

Quartz.Net scheduler works locally but not on remote host

jusqu'à empêcher les conditions de course entre vos travaux (par exemple, essayer de supprimer un fichier qui hasn ». t effectivement été copié dans le système de fichiers encore), ce que vous devez mettre en œuvre est une sorte d'emploi enchaînement:

http://quartznet.sourceforge.net/faq.html#howtochainjobs

Dans le passé, je l'ai utilisé les TriggerListeners et JobListeners faire quelque chose de semblable à ce que vous avez besoin. Fondamentalement, vous enregistrez des écouteurs d'événements qui attendent d'exécuter certaines tâches jusqu'à ce qu'un autre travail soit terminé.Il est important de tester ces auditeurs et de comprendre ce qui se passe lorsque ces événements sont déclenchés. Vous pouvez facilement trouver vous-même l'implémentation d'une solution qui semble bien fonctionner en développement (faux positif), puis échouer en production, sans comprendre comment et quand le planificateur fait certaines choses en ce qui concerne l'exécution de travail asynchrone.

Bonne chance! Les programmeurs sont amusants!