2013-04-05 81 views
3

我有一份工作,我想跟踪50个最新的运行。出于某种原因,它似乎并不像状态被存储在我的简单PROTOTYP:在Quartz.net中每次执行后都不会持久JobData

[PersistJobDataAfterExecution] 
public class ApiJob : IJob 
{ 
    private const string JobRunsKey = "jobRuns"; 
    private const int HistoryToKeep = 50; 
    private const string UrlKey = "Url"; 

    public void Execute(IJobExecutionContext context) 
    { 
     var jobDataMap = context.JobDetail.JobDataMap; 

     var url = context.JobDetail.JobDataMap.GetString(UrlKey); 
     var client = new RestClient(url); 
     var request = new RestRequest(Method.POST); 
     var response = client.Execute(request); 
     var runs = new List<JobRun>(); 
     if (jobDataMap.ContainsKey(JobRunsKey)) 
     { 
      runs = (List<JobRun>) jobDataMap[JobRunsKey]; 
     } 

     Console.WriteLine("I'm running so fast!"); 

     runs.Insert(0, new JobRun(){Message = "Hello", Result = JobResult.Ok, TimeForRun = DateTime.UtcNow}); 
     while (runs.Count > HistoryToKeep) 
     { 
      runs.RemoveAt(HistoryToKeep); 
     } 
     jobDataMap.Put(JobRunsKey, runs); 
    } 
} 

我尝试存储新的列表与jobDataMap.Put(JobRunsKey, runs)但下一次我触发键从JobDataMap缺少的工作。有什么建议么?

+0

您正在使用哪个数据存储? – jvilalta 2013-04-06 00:51:25

+0

@jvilalta,SQL服务器。创建作业时,所有内容都存储在jobdata中,但在执行时尝试添加列表不起作用。 – 2013-04-06 06:32:23

回答

3

您可能没有将您的JobRun类标记为可序列化的

这应该工作

[Serializable] 
public class JobRun 
{ 
    public string Message  ; 
    public string Result  ; 
    public DateTime TimeForRun ; 
} 
+0

为什么没有打到我?我还没有尝试过它,代码是在woork,但它会是第一个思考的星期一上午。 – 2013-04-06 12:52:08

+0

谢谢你,先生,它的作品就像一个魅力! – 2013-04-08 11:24:13

相关问题