我使用 Quartz & .Net Core 创建了一个调度程序 API。 如何保持这个时间表,因为它在一段时间后不起作用?
可以根据此链接在 Application_Start() 中处理此问题:Can you prevent your ASP.NET application from shutdown?.
或者这可以在 Startup.cs 中的 .Net Core 调度程序中完成吗?或者我在哪里可以使用这种请求创建来保持计划有效? 感谢任何帮助。 谢谢
编辑:我创建了一个 Windows PowerShell 脚本来为调度程序创建请求以保持调度程序处于活动状态。它解决了这个问题。 (代码包含在我下面的答案中)。 谢谢
我通常在 .Net.Core 应用程序的 Startup.cs 中安排 quartz 作业,并且该作业永远存在。
在 public void ConfigureServices(IServiceCollection services) 注册工厂和调度程序:
services.AddSingleton<ISchedulerFactory, StdSchedulerFactory>();
IScheduler scheduler = services.BuildServiceProvider().GetService<ISchedulerFactory>().GetScheduler().Result;
services.AddSingleton<IScheduler>(scheduler);
在 public async void Configure(IApplicationBuilder app..... schedule the jobs
serviceProvider.GetService<IScheduler>().Start();
Quartz.IScheduler _scheduler = serviceProvider.GetService<Quartz.IScheduler>();
//Define job
IJobDetail job = JobBuilder.CreateForAsync<IJobImplementationXXXXX>()
.WithIdentity("job_namexxxx")
.Build();
//Define trigger
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger_namexxxx")
.StartNow()
.WithSimpleSchedule(x => x
.WithInterval(TimeSpan.FromMilliseconds(PollingIntervalxxxx))
.RepeatForever())
.Build();
//Execute Job
await _scheduler.ScheduleJob(job, trigger);
当然还有将在每个 PollingInterval 执行的 IJob 实现
[DisallowConcurrentExecution]
public class IJobImplementationXXXXX: IJob
{
public async Task Execute(IJobExecutionContext context)
{
.....
我创建了一个 powershell 脚本来为调度程序创建请求以保持调度程序处于活动状态。它解决了这个问题。 (因此我用这个答案编辑了上面的问题)
脚本:
$url = "http://localhost/someAtion"
Invoke-WebRequest -Uri $url
创建了一个 Windows 任务调度程序以在特定时间间隔执行此脚本。