2009-03-25 3 views
2

ASP.NET 웹 응용 프로그램에서 Quartz.NET을 사용하고 있습니다.Quartz.NET 트리거가 실행되지 않음

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(); 

여기에 "BackupJob을": 내가 그것을 (테스트 목적으로) 실행 있는지 확인 버튼 클릭 처리기에서 다음 코드를 넣어

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

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

내 질문 : "BackupJobStart 이유() "발사하지 않습니까? 전에 비슷한 코드를 사용했는데 정상적으로 작동했습니다.

EDIT : @Andy White, Global_asax의 Application_Start에 있습니다. 이 문제를 좁히기 위해 단추 클릭 처리기로 이동 한 이유는 작동하지 않습니다.

답변

4

Quartz.NET 로깅을 연결 했습니까? 한 번 실행하지 않는 작업에 문제가있었습니다 (이유를 잊어 버렸습니다).하지만 일단 Quartz.NET 로깅이 끝나면 문제는 분명합니다.

이 (이미 그 일을하지 않는 경우) 시도 가치 :

업데이트 만하면 program.cs이 추가 콘솔 로깅을 사용하도록 설정하는 방법 :

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

의 시간을 봐, 내 내 작업이 실행 된 클래스는 기본 (매개 변수없는) public 생성자를 가지고 있지 않은 것이 었습니다. – patrickbadley

1

또 다른 가능성은 스케줄러를 실행하는 방법입니다. 확실하지는 않지만 ASP.NET 응용 프로그램에서 예약 스레드를 실행하려고 할 때 문제가 발생할 수 있습니다. 버튼 클릭 핸들러에 SchedulerFactory/Scheduler 객체를 두는 것은 원하는 결과를 얻지 못하는 것처럼 보입니다.

응용 프로그램의 "백그라운드"에서 실행할 수 있도록 "글로벌"수준에서 스케줄러를 만들어야 할 수도 있습니다. 예약 된 작업을 별도의 Windows 서비스로 옮기면 웹 응용 프로그램에서 스케줄러를 유지 관리 할 필요가 없습니다.

과거에 성공했을 때 어떻게 스케줄러를 호출 했습니까?

3

아마도 시간 문제 일 수 있습니다.

나는 당신과 같은 문제를 겪었고 그 시간은 UTC + 2 인 나라에 살고 있습니다. 그래서 StartTimeUtc를 트리거로 설정하면 DateTime.Now를 사용했기 때문에 트리거는 그렇지 않았습니다. 2 시간 후까지 해고해야하고 코드 작성이 시작된 바로 그 순간에 해고되어야한다고 생각했습니다.

조심스럽게이 문제를 찾아 내 도움 트리거의 실행과 상영

+0

고마워요! 그게 내 Quartz 설정이 작동하지 않는 문제였습니다. 방금 DateTime.Now.ToUniversalTime()과 같은 일을하고 잘 작동합니다. – Timotei

관련 문제