Quartz.NET - les Emplois ne fonctionnent pas?
Je suis d'essayer de mettre en œuvre Quartz.NET en tant que Service Windows en C#. Mes travaux ne sont pas de déclenchement lorsque je m'attends à déclencher... à tous, en fait, aussi loin que je peux dire?
J'ai Mon Travail, planifier de départ sur la prochaine même minute après le et en cours d'exécution "finement". Toutefois, lorsque la minute qui vient, je n'arrive pas à dire si quelque chose tourne réellement.
Je suppose que lorsque mon travail s'exécute, un CLI fenêtre pop sur l'exécution de la tâche, et la Console d'opérations pourraient être visible, (j'ai même mis un Console.ReadKey()
en place pour assurer la fenêtre n'est pas l'ouverture et la fermeture si vite que je ne peux pas le voir), mais aussi loin que je peux dire que le calendrier est tout simplement pas l'exécution des travaux.
J'ai remarqué que toutes les heures sont en UTC, et que le StartTimeUtc
sera réglé à l'heure UTC, qui est de +6 heures à partir de mon ordinateur local temps, mais je voudrais également supposer que le Quartz planificateur de poignées que par le calcul de temps d'exécution à partir de mon Fuseau horaire, bien que je n'ai aucun moyen que je connaisse pour confirmer, ou pour confirmer les heures RÉELLES que mon emploi du temps est réglé.
J'imagine qu'il y a une certaine façon de configurer la Journalisation Commune de l'assemblée et l'utiliser pour m'aider à savoir ce que mon statut est, mais je n'ai pas encore de comprendre ce que pour permettre à un journal de toute sorte pour les commentaires de mon Service Windows, à côté de l'écriture dans le journal des événements que j'ai créé pour elle.
Mon OnStart fonction de mon service windows
protected override void OnStart(string[] args)
{
eventLog.WriteEntry("--- STARTING eLoyalty Scheduler Service ---");
//construct a scheduler factory
ISchedulerFactory schedFact = new StdSchedulerFactory();
//get a scheduler
IScheduler sched = schedFact.GetScheduler();
//construct job info
JobDetail jobDetail = new JobDetail("eLoyaltySchedulerService", null, typeof(PortalSchedulerJob));
jobDetail.JobDataMap["jobSays"] = "eLoyalty Scheduler Service Executing!";
jobDetail.JobDataMap["myStateData"] = new ArrayList();
//fire every minute
Trigger trigger = TriggerUtils.MakeMinutelyTrigger();
//start on the next even minute
trigger.StartTimeUtc = TriggerUtils.GetEvenMinuteDate(DateTime.UtcNow);
//name it
trigger.Name = "NextEvenMinute";
//schedule it
sched.ScheduleJob(jobDetail, trigger);
//start the schedule
sched.Start();
eventLog.WriteEntry("--- STARTED eLoyalty Scheduler Service ---");
}
Mon Travail Execute() de la fonction est la suivante:
public void Execute(JobExecutionContext context)
{
try
{
string instName = context.JobDetail.Name;
string instGroup = context.JobDetail.Group;
JobDataMap dataMap = context.MergedJobDataMap;
string jobSays = dataMap.GetString("jobSays");
ArrayList state = (ArrayList)dataMap["myStateData"];
state.Add(DateTime.UtcNow);
Console.WriteLine("Instance {0} of PortalSchedulerJob says: {1} @ {2}", instName, jobSays, DateTime.UtcNow);
Console.ReadKey();
}
catch (JobExecutionException Ex)
{
throw Ex;
}
}
Si vous pouvez m'aider à comprendre comment résoudre mon calendrier RÉEL de l'activité, j'ai peut-être capable de résoudre cela sur mon propre... ?
OriginalL'auteur Rimer | 2010-11-24
Vous devez vous connecter pour publier un commentaire.
Dans Quartz.NET tâches, vous devez seulement soulever JobExecutionException exceptions:
Quartz.net - Leçon 3:
Au lieu de:
Faire quelque chose comme ceci:
Vous pouvez alors gérer l'Exception de manière centralisée:
Très Vrai. Suis tellement pris dans la gestion d'exception choses que je n'ai même pas remarqué votre utilisation de la Console qui ne sera certainement pas travailler dans un Service Windows!
Les services Windows pouvez de sortie de la console. Vous devez activer l'accès interactif pour cela.
OriginalL'auteur Keith Blows
Vous pouvez toujours exécuter votre service Windows dans la console lorsque vous déboguez:
Assurez-vous de modifier le type d'application pour l'Application de la Console dans les propriétés de votre projet de service Windows (ce qui n'affecte pas en cours d'exécution en tant que service Windows quand il n'est pas exécuté en mode interactif).
OriginalL'auteur brimble2010
Merci pour l'entrée à tout le monde... je ne pouvais pas faire ce travail, malheureusement, mais quand j'ai ajouté un consignateur d'événements de mon Travail d'exécution de la fonction, j'ai trouvé qu'il a écrit pour le journal des événements chaque minute comme prévu.
Je suppose que le
Console.WriteLine()
etConsole.ReadKey()
funcs ne rien faire dans un service windows environnement?REMARQUE: Ils font quelque chose, mais en arrière-plan comme un service plutôt que dans une fenêtre de console...
OriginalL'auteur Rimer
si vous souhaitez déboguer votre emploi conserver visual studio ouvert, dans votre code d'emploi :
Système.Diagnostics.Débogueur.Lancer();
qui vous permettra d'attacher le débogueur de visual studio et vous pouvez voir ce qui se passe.
alternativement, si vous voulez obtenir de journalisation commune de travail, envoyez-moi un message que j'ai tout fonctionne très bien dans mon service windows.
OriginalL'auteur Mocksy
Nous avons eu quelques problèmes avec les déclencheurs raté. Je ajout d'un mondial de déclenchement de l'écouteur à capturer des événements liés à la décharge des emplois et qui a fourni l'information nécessaire pour déboguer le problème.
Nous avons également accroché NLog par Commune.La journalisation pour attraper le Quartz interne d'enregistrement (vous remarquerez peut-être que nous utilisons La Journalisation Simple Façade nous-mêmes, de sorte que le composant est également configuré ici). Voici notre application de config, j'espère que ça peut sauter commencer vous:
OriginalL'auteur quentin-starin