2015-03-25 88 views
1

我对ASp.net应用程序有麻烦,我测试了几个解决方案,但是我没有看到任何问题。感谢您的建议。用Quartz.Net和Asp.Net应用程序执行JobSchedule的好方法是什么?

我已经安装并运行Quartz.Net作为Windows服务。 Quartz.Net与我的API位于同一个文件夹中,以便在其中执行作业。

下面我的Global.asax的Application_Start

public static ISchedulerFactory schedFact; 
public static IScheduler scheduler; 

protected void Application_Start() 
{ 
    NameValueCollection properties = new NameValueCollection(); 
    properties["quartz.scheduler.instanceName"] = "ServerScheduler"; 
    properties["quartz.scheduler.proxy"] = "true"; 
    properties["quartz.threadPool.threadCount"] = "10"; 
    properties["quartz.scheduler.proxy.address"] = "tcp://localhost:555/QuartzScheduler"; 


    schedFact = new StdSchedulerFactory(properties); 
    scheduler = schedFact.GetScheduler(); 
    scheduler.Start(); 

    MyAPI.Services.ScheduleTasks.JobScheduler.StartGenerateContract(); 
} 

这在我的作业scrippted类:

public class ScheduleTasks 
{ 
    public static Dictionary<string, string> report; 

    public class JobScheduler 
    { 
     public static void StartGenerateContract() 
     { 
      try 
      { 
       MailService.SendMail("StartGenerateContract", "Scheduletask", 
        new Exception(DateTime.Now.ToString())); 


       IJobDetail job_generate = JobBuilder.Create<GenerateAndSendContract>() 
        .WithIdentity("generateContractJob", "group1") 
        .Build(); 

       ITrigger trigger = TriggerBuilder.Create() 
        .WithIdentity("trigger_contracts", "group1") 
        .ForJob("generateContractJob", "group1") 
        .StartNow() 
        .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(01, 00)) 
        .Build(); 

       MyAPI.MvcApplication.scheduler.ScheduleJob(job_generate, trigger); 
      } 
      catch (Exception e) 
      { 
       throw new Exception(e.Message); 
      } 
     } 
    } 
} 

然后我的工作是在同一个文件和类ScheduleTasks

public class GenerateAndSendContract : IJob 
{ 
    public void Execute(IJobExecutionContext context) 
    { 
     try 
     { 
      MailService.SendMail("GenerateAndSendContract", "Scheduletask"); 
       //my working code... 
     } 
     catch (Exception e) 
     { 
      MailService.SendErrorMail("GenerateAndSendContract", "ScheduleTasks", e); 
     } 
    } 
} 

我的scheduleTask完美执行,因为我收到第一封电子邮件(StartGenerateC良好的时间间隔。但是该作业没有执行,因为类generateandsendcontract中的代码没有被触发(没有中断点,没有发送邮件GenerateAndSendContract)。

我的代码有问题吗?感谢您的帮助。

+0

'MyAPI.MvcApplication.scheduler'背后的代码是什么? – 2015-03-26 14:56:05

+0

嗨,这是我的公共静态IScheduler调度程序;这是在我的application_start中启动的 – Seb 2015-03-26 15:13:35

回答

1

当创建的MVC应用程序侧的调度,你只需要这些属性:

properties["quartz.scheduler.instanceName"] = "RemoteClient"; 
properties["quartz.scheduler.proxy"] = "true"; 
properties["quartz.threadPool.threadCount"] = "0"; 
properties["quartz.scheduler.proxy.address"] = address; 

你也不需要调用上充当客户机调度程序的启动方法。

相关问题