2009-03-25 9 views
2

J'utilise Quartz.NET dans mon application Web ASP.NET. je mets le code suivant dans un bouton gestionnaire de clic pour vous assurer qu'il exécute (à des fins de test):Le déclenchement Quartz.NET ne se déclenche pas

Quartz.ISchedulerFactory factory = new Quartz.Impl.StdSchedulerFactory(); 
Quartz.IScheduler scheduler = factory.GetScheduler(); 
Quartz.JobDetail job = new Quartz.JobDetail("job", null, typeof(BackupJob)); 
Quartz.Trigger trigger = Quartz.TriggerUtils.MakeDailyTrigger(8, 30); // i edit this each time before compilation (for testing purposes) 
trigger.StartTimeUtc = Quartz.TriggerUtils.GetEvenSecondDate(DateTime.UtcNow); 
trigger.Name = "trigger"; 
scheduler.ScheduleJob(job, trigger); 
scheduler.Start(); 

voici "BackupJob":

public class BackupJob : IJob 
{ 
    public BackupJob() 
    { 
    } 

    public void Execute(JobExecutionContext context) 
    { 
     NSG.BackupJobStart(); 
    } 
} 

ma question: pourquoi est « BackupJobStart() "Ne pas tirer? J'ai utilisé un code similaire avant et ça a bien fonctionné.

EDIT: @Andy White, je l'aurais dans Application_Start dans Global.asax. cela ne fonctionne pas, c'est pourquoi je l'ai déplacé à un gestionnaire de clic sur un bouton pour affiner le problème.

Répondre

4

Avez-vous l'enregistrement Quartz.NET branché? Une fois, j'ai eu un problème avec un travail qui ne s'exécutait pas (j'oublie pourquoi), mais une fois que j'ai eu la journalisation Quartz.NET, le problème était évident.

Il vaut la peine d'essayer (si vous ne le faites pas déjà):

Mise à jour: Il suffit d'ajouter ceci à vos Program.cs pour activer la journalisation de la console:

Common.Logging.LogManager.Adapter = new Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter { Level = Common.Logging.LogLevel.Info}; 
+0

Cela m'a aidé à trouver la question, le mien était que la classe mon travail exécutait n'a pas de défaut (parameterless) constructeur public. – patrickbadley

1

Une autre possibilité est la façon dont vous exécutez le planificateur. Je ne suis pas totalement sûr, mais vous pouvez rencontrer des problèmes en essayant d'exécuter un threads de planification dans une application ASP.NET. Mettre les objets SchedulerFactory/Scheduler dans un gestionnaire de clic de bouton ne semble pas vous donner les résultats souhaités.

Vous devrez peut-être créer le planificateur à un niveau plus «global», afin qu'il puisse s'exécuter dans le «contexte» de l'application. Il peut également être judicieux de déplacer un travail planifié dans un service Windows distinct, afin de ne pas avoir à gérer le planificateur dans l'application Web.

Lorsque vous avez eu du succès dans le passé, comment appeliez-vous le planificateur?

3

Peut-être que c'est un problème de temps. J'ai eu le même problème que vous, et j'habite dans un pays où l'heure est UTC + 2. Ainsi, quand j'ai placé le StartTimeUtc au déclencheur, j'ai employé DateTime.Now, ainsi le déclencheur n'a pas Je dois tirer jusqu'à deux heures plus tard, et j'ai pensé qu'il devait être tiré au moment même où mon code a commencé.

Regardez attentivement le temps de l'exécution de son déclenchement et StartTime

+0

Merci beaucoup! C'était le problème que mon installation de Quartz n'a pas fonctionné. Je viens de faire quelque chose comme: DateTime.Now.ToUniversalTime() et ça marche bien. – Timotei

Questions connexes