2010-07-25 5 views
1

Je viens de démarrer avec Quartz.net et je l'ai exécuté en tant que service. J'ai créé un Job et déplacé le .dll résultant dans le dossier Quartz et ajouté une nouvelle entrée dans le fichier jobs.xml pour le lancer toutes les 3 secondes.Mise à jour de la DLL de travail Quartz.NET sans redémarrage du service

J'ai mis à jour le travail .dll mais il est utilisé par Quartz (ou est verrouillé).

Est-il possible de mettre à jour le fichier .dll sans redémarrer le service Quartz? Sinon, qu'arriverait-il à un travail de longue durée si j'arrêtais/démarrais le service Quartz?

Répondre

3

Vous ne pouvez pas mettre à jour la tâche dll sans redémarrer le service. Une fois que le serveur a démarré, il charge la tâche dll et les types chargés restent en mémoire. C'est ainsi que fonctionne le .NET runtime. Pour réaliser quelque chose comme le rechargement dynamique, vous devez utiliser des domaines d'application créés par programme, etc.

Si vous arrêtez le planificateur, vous pouvez passer un paramètre bool si vous souhaitez attendre que les travaux soient terminés en premier. Ensuite, vous seriez en sécurité avec des travaux en cours et aucun nouveau ne se produirait pendant ce temps l'ordonnanceur est en train de fermer.

+0

pourriez-vous me dire ce que le paramètre est ou un lien pour documenter cela avec un exemple? –

+0

C'est la méthode Shutdown dans IScheduler: http://quartznet.sourceforge.net/apidoc/topic93.html. Il bloquera jusqu'à la fin des travaux et vous pouvez mettre fin au processus en toute sécurité. Surtout si vous utilisez la persistance de base de données pour gérer les ratés. –

Questions connexes