我已经在我的asp.net应用程序中配置了quartz.net,并且我的工作设置为每天凌晨1点运行。如果我更改job-config.xml文件以使作业在2分钟内运行,则会自动获取更改而不重新启动应用程序池,并且该作业将被触发。但是,如果我恢复更改以便在凌晨1点再次开始工作,那么它似乎无法启动。对我来说显而易见的原因是应用程序池或IIS已重新启动,这会导致我的asp.net应用程序关闭(实际上关闭了quartz.net,因为它是同一个asp的部分包装。 net process),但为了测试quartz.net是否仍在运行,没有任何iisreset
或app-pool循环,我再次更改job-config.xml文件,再次在2分钟内启动并运行作业,所以似乎没有发生应用程序池回收或IIS重置的情况 - 我不明白。
我想在我的asp.net应用程序下运行该作业,而无需创建额外的Windows服务,因此任何帮助都将非常感激。下面是我的quartz.net配置文件的片段。
<job>
<job-detail>
<name>xjob</name>
<group>MyJobs</group>
<description>blah blah</description>
<job-type>yyy.xxx,yyy</job-type>
<volatile>false</volatile>
<durable>true</durable>
<recover>false</recover>
</job-detail>
<trigger>
<cron>
<name>xJobTrigger</name>
<group>MyJobs</group>
<description>blah blah</description>
<job-name>xJob</job-name>
<job-group>MyJobs</job-group>
<cron-expression>0 0 1 * * ?</cron-expression>
</cron>
</trigger>
谢谢
答案 0 :(得分:1)
我认为有一些事情正在发生。正如您所提到的,如果您在asp.net下运行调度程序,则该进程可能会被回收,并且您的调度程序可能无法在应该运行时运行该作业。如果在给定时间运行作业很重要,那么您需要将Quartz.net设置为服务。
缺少的另一件事是我认为你正在使用RAM作业,这意味着当调度程序重新启动时,它会重新安排作业,因此在你的情况下,它将不会再次触发,直到1.如果调度程序如果未在1运行,则即使调度程序重新启动(等等),作业也不会触发。如果您使用ADO作业存储,那么至少触发器将保持不变,并且一旦调度程序再次启动并且检测到失火,作业将会运行。