Wykonywanie zadań Quartz.NET z usługi Windows
Mam aplikację internetową ASP.NET MVC 4 i quartz.net działającą jako usługa systemu Windows i wspólne rejestrowanie skonfigurowane zgodnie z tymi źródłami:
iz tym kodem w Global.asax na miejscu:
var properties = new NameValueCollection();
properties["quartz.scheduler.instanceName"] = "ServerScheduler";
// set thread pool info
properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz";
properties["quartz.threadPool.threadCount"] = "5";
properties["quartz.threadPool.threadPriority"] = "Normal";
// set remoting expoter
properties["quartz.scheduler.proxy"] = "true";
properties["quartz.scheduler.proxy.address"] = "tcp://localhost:555/QuartzScheduler";
// construct a scheduler factory
ISchedulerFactory schedFact = new StdSchedulerFactory(properties);
// get a scheduler
IScheduler sched = schedFact.GetScheduler();
sched.Start();
IJobDetail jobDetail = JobBuilder.Create<SimpleJob>()
.WithIdentity("simpleJob", "simpleJobs")
.RequestRecovery()
.Build();
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("simpleTrigger", "simpleTriggers")
.StartNow()
.WithSimpleSchedule(x => x.WithRepeatCount(4).WithIntervalInSeconds(10))
.Build();
sched.ScheduleJob(jobDetail, trigger);
i praca:
public class SimpleJob : IJob
{
public SimpleJob()
{
}
public void Execute(IJobExecutionContext context)
{
Debug.WriteLine("I Executed at " + DateTime.Now.ToString());
}
}
a teraz, gdy uruchomię aplikację, dziennik generuje coś takiego 5 razy
19:35:23 [ServerScheduler_QuartzSchedulerThread] DEBUG Quartz.Core.QuartzSchedulerThread - Batch acquisition of 1 triggers
19:35:23 [ServerScheduler_QuartzSchedulerThread] DEBUG Quartz.Simpl.SimpleJobFactory - Producing instance of Job 'simpleJobs.simpleJob', class=Navigate.Quartz.Jobs.SimpleJob
19:35:23 [ServerScheduler_QuartzSchedulerThread] DEBUG Quartz.Core.QuartzSchedulerThread - Batch acquisition of 1 triggers
19:35:23 [ServerScheduler_Worker-1] DEBUG Quartz.Core.JobRunShell - Calling Execute on job simpleJobs.simpleJob
19:35:23 [ServerScheduler_Worker-1] DEBUG Quartz.Core.JobRunShell - Trigger instruction : NoInstruction
Następnie usuwa wyzwalacz i kontynuuje, ale żadne zadanie nie jest wykonywane i żadne wiersze nie są zapisywane do wyjścia debugowania
jeśli jednak uruchomię program planujący osadzony w aplikacji, nie przekazując NameValueCollection do StdSchedulerFactory
ISchedulerFactory schedFact = new StdSchedulerFactory();
wszystko działa dobrze i otrzymuję linie wyprowadzane 5 razy co 10 sekund
I Executed at 28.05.2013. 19:47:48
I Executed at 28.05.2013. 19:47:58
I Executed at 28.05.2013. 19:48:08
I Executed at 28.05.2013. 19:48:18
I Executed at 28.05.2013. 19:48:28
Czego mi brakuje, dlaczego usługa systemu Windows faktycznie nie wykonuje kodu, usługa działa jako System lokalny, nic się nie zmieni, jeśli zmienię ją na konto administratora. Każda pomoc zostanie doceniona.
Chris