如何使计划保持活动状态(使用 Quartz 和 .Net Core 创建)——因为它在部署到 IIS 上一段时间后不起作用

How to keep a schedule alive (created using Quartz & .Net Core) - as it is not working after some time after deployed on IIS

如何保持时间表(使用 Quartz 和 .Net Core 创建),因为它在一段时间后不起作用?可以根据这个 link: Can you prevent your ASP.NET application from shutting down? 在 Application_Start() 中处理这个问题。

这可以在 Startup.cs 中的 .Net Core 调度程序中完成吗?或者我在哪里可以使用这种请求创建来保持计划有效? 感谢任何帮助。 谢谢

编辑:我创建了一个 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 任务计划程序以按特定时间间隔执行此脚本。