我得到了一个ASP。. NET MVC 4 web应用程序和quartz.net作为windows服务运行,并根据这些源配置通用日志:
http://geekswithblogs.net/TarunArora/archive/2012/11/16/install-quartz.net-as-a-windows-service-and-test-installation.aspx http://geekswithblogs.net/TarunArora/archive/2012/11/17/quartz.net-windows-service-configure-logging.aspx并在全局中使用此代码。Asax就位:
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);
和工作:
public class SimpleJob : IJob
{
public SimpleJob()
{
}
public void Execute(IJobExecutionContext context)
{
Debug.WriteLine("I Executed at " + DateTime.Now.ToString());
}
}
现在如果我运行应用程序,日志会产生类似这样的东西5次
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
然后删除触发器并继续,但不执行任何作业,也不向调试输出写入任何行
如果我运行嵌入在应用程序中的调度器,然而,通过不传递NameValueCollection给StdSchedulerFactory
ISchedulerFactory schedFact = new StdSchedulerFactory();
一切正常,每10秒输出5行
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
我错过了什么,为什么windows服务实际上不是执行代码,服务是作为本地系统运行的,如果我将其更改为管理员帐户,没有任何变化。如有任何帮助,不胜感激。
克里斯我认为服务实际上可能正在执行代码,但您没有看到输出。尝试将Debug.WriteLine()更改为使用Common。记录日志,以便将输出包含在Quartz用于其日志输出的相同日志中。有关代码示例,请参阅http://netcommon.sourceforge.net/docs/1.2.0/reference/html/logging.html。
我还查看了我们在实现中使用的代码,我看到我们没有在。getscheduler()之后执行。start()。由于您正在使用运行Quartz的服务,因此调度器应该已经启动,您应该只使用从. getscheduler()返回的调度器。试着从你的代码中删除。start()。