我有一個自定義的Windows服務,我想使用Quartz .NET來安排服務運行的時間。現在,我瞭解quartz.NET的基礎知識,但我不知道如何將它連接到Windows服務。因此,可以說我有Service.exe,我想每小時運行一次。我如何通過Quartz實現這個功能?我知道這是一個模糊的問題,但實際上沒有其他辦法可以問它。用石英計劃窗口服務.NET
在此先感謝。
我有一個自定義的Windows服務,我想使用Quartz .NET來安排服務運行的時間。現在,我瞭解quartz.NET的基礎知識,但我不知道如何將它連接到Windows服務。因此,可以說我有Service.exe,我想每小時運行一次。我如何通過Quartz實現這個功能?我知道這是一個模糊的問題,但實際上沒有其他辦法可以問它。用石英計劃窗口服務.NET
在此先感謝。
您需要設置作業和觸發器。該作業由觸發器調用(http://quartznet.sourceforge.net/tutorial/lesson_3.html)。這是一個每小時運行一個例子。
// construct a scheduler factory
ISchedulerFactory schedFact = new StdSchedulerFactory();
// get a scheduler
IScheduler sched = schedFact.GetScheduler();
sched.Start();
// construct job info
JobDetail jobDetail = new JobDetail("myJob", null, typeof(DumbJob));
// fire every hour
Trigger trigger = TriggerUtils.MakeHourlyTrigger();
// start on the next even hour
trigger.StartTime = TriggerUtils.GetEvenHourDate(DateTime.UtcNow);
trigger.Name = "myTrigger";
sched.ScheduleJob(jobDetail, trigger);
這是調用Service.exe的類。
public class DumbJob : IJob
{
public void Execute(JobExecutionContext context)
{
string instName = context.JobDetail.Name;
string instGroup = context.JobDetail.Group;
// Note the difference from the previous example
JobDataMap dataMap = context.MergedJobDataMap;
string jobSays = dataMap.GetString("jobSays");
float myFloatValue = dataMap.GetFloat("myFloatValue");
ArrayList state = (ArrayList) dataMap.Get("myStateData");
state.Add(DateTime.UtcNow);
Console.WriteLine("Instance {0} of DumbJob says: {1}", instName, jobSays);
}
}
你也可以在windows服務中啓動一個線程,跟蹤你最後一次啓動exe的時間,然後重新設置。石英有點簡單,並且會完成相同的事情。但是,你的問題是Quartz特有的。
但是它究竟在哪裏與Service.exe掛鉤呢? –
您可以在「執行(...)」方法中調用它。 –
如何?語法上來說 –
我會在這種情況下使用Windows調度程序,因爲功能已經封裝在服務中。 –
這也是我的第一個想法。但不幸的是,我並沒有在這裏做出決定:P –