2012-11-02 3 views
1

ASP.NET MVC 프로젝트에서 일정에 따라 일부 작업을 실행하기 위해 Quartz lib를 사용합니다. 내 Jobs를 Global.asax 파일의 Application_Start 메소드로 초기화합니다. 그러나 메소드 Application_End가 실행 되었기 때문에 얼마 후에 Quartz가 중지되었다.ASP.NET MVC에서 Quartz 사용하기

변수는 static으로 선언했다 : 여기

public static ISchedulerFactory scheduleFactory = new StdSchedulerFactory(); 

public static IScheduler scheduler = scheduleFactory.GetScheduler(); 

는 Quards의 잡스가 초기화 된 방법입니다

IJobDetail jobSender = new JobDetailImpl("jobSender", "MailGroup", typeof(JobMailSender)); 

ITrigger triggerSender = new CronTriggerImpl("triggerSender", "SenderGroup", "jobSender", "MailGroup", "0 0/30 * * * ?"); 

scheduler.ScheduleJob(jobSender, triggerSender); 

scheduler.Start(); 

나는 그런 일이 이유를 발견했다. 모든 사용자 세션이 종료되고 서버에 활성 사용자 세션이 없으면 Application_End 메소드가 실행됩니다.

저는 매 15 분마다 사이트를 열어서 새로운 사용자 세션이 서버에 생성되는 새로운 Quartz의 작업을 만들었습니다. 하지만 여전히 Application_End 메서드가 때때로 호출됩니다.

비슷한 문제가있는 사람이 있습니까? 어쩌면 web.config에는 서버에 활성 세션이 없더라도 Application_End 메소드가 실행되지 않는 일부 설정이 있습니까?

답변

2

IIS 내부에서 Quartz를 실행하면이 문제가 발생할 수 있다는 것을 알게되었습니다. 응용 프로그램 풀이 재활용 중이기 때문에 아마 Application_End가 표시됩니다.

Quartz를 동일한 기계에 서비스로 설치하고 Quartz의 원격 프록시를 통해 웹 사이트에서 해당 서비스에 액세스하여이 문제를 해결했습니다.

다음 링크는 도움이 될 수 있습니다 : 우리의 응용 프로그램 우리는 또한 Application_End을 위해 Application_Start 다시 불렀다 또는 웹 서버가 유휴 상태 일 때, 그리고 다음 활동에 대한 후 몇 시간 후에 호출 된 동일한 문제에 직면 한에서 Use one windows service to execute jobs and two web applications to schedule jobs

0

을 , 그리고 계획은 몇 번이고 다시 실행되었다.

우리 데이터베이스의 간단한 테이블을 가지고 말하면서 Quratz가 실행되는 로그를 유지 관리하는 데 사용 된 cron_schedule이라고합니다. 우리의 방아쇠 방법에서 우리는 먼저 데이터베이스에있는 마지막 실행 시간이 실행 ​​기준을 충족하는지 확인한 다음 방아쇠를 실행합니다. 그렇지 않으면 단순히 반환하거나 그냥 로그 만 작성하여 일정이 실행되었지만 아무 것도하지 않았 음을 알 수 있습니다 .