我的ASp.net应用程序出了问题,我已经测试了几个解决方案,但我没有看到任何问题。感谢您提前获取建议。
我已经安装并运行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();
}
这里是我的工作所在的课程:
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完美执行,因为我收到第一封电子邮件(StartGenerateContract),间隔很好。但是这个作业没有被执行,因为没有触发类generateandsendcontract中的代码(没有断点,没有邮件发送GenerateAndSendContract)。
我的代码有什么问题吗?谢谢你的帮助。
答案 0 :(得分:1)
在MVC应用程序端创建调度程序时,您只需要以下属性:
properties["quartz.scheduler.instanceName"] = "RemoteClient";
properties["quartz.scheduler.proxy"] = "true";
properties["quartz.threadPool.threadCount"] = "0";
properties["quartz.scheduler.proxy.address"] = address;
您也不需要在充当客户端的调度程序上调用Start方法。