2013-05-28 100 views
3

Quartz.NET工作我有一個ASP.NET MVC 4 Web應用程序和運行quartz.net作爲Windows服務和公共記錄,根據這些資源進行配置:執行從Windows服務

http://geekswithblogs.net/TarunArora/archive/2012/11/16/install-quartz.net-as-a-windows-service-and-test-installation.aspx

,並與該代碼在Global.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

一切工作正常,我也得到了行輸出每10秒

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服務,該服務作爲本地系統運行,沒有什麼如果我改變了5倍將其更改爲管理員帳戶。任何幫助將不勝感激。

克里斯

+0

任何線索有人嗎? :( – DoubleZ

回答

1

我認爲,該服務可能被實際執行的代碼,但你看不到輸出。嘗試更改Debug.WriteLine()以使用Common.Logging,以便輸出包含在Quartz用於其日誌輸出的相同日誌中。代碼示例請參閱http://netcommon.sourceforge.net/docs/1.2.0/reference/html/logging.html

我還查看了我們在實現中使用的代碼,並且看到我們沒有在.GetScheduler()之後執行.Start()。由於您正在使用運行Quartz的服務,所以調度程序應該已經啓動,您應該只使用從.GetScheduler()返回的調度程序。嘗試從代碼中刪除.Start()。

+0

好吧,我嘗試了一些更明確的東西,比如向數據庫中添加條目,但仍然沒有發生任何事情,所以我猜測情況並非如此? – DoubleZ

+0

也試圖在.GetScheduler()之後調用.Start(),但無濟於事 – DoubleZ