如何保持计划有效(使用 Quartz 和 .Net Core 创建)——因为它在 IIS 上部署一段时间后无法正常工作

问题描述 投票:0回答:2

我使用 Quartz & .Net Core 创建了一个调度程序 API。 如何保持这个时间表,因为它在一段时间后不起作用?

可以根据此链接在 Application_Start() 中处理此问题:Can you prevent your ASP.NET application from shutdown?.

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

编辑:我创建了一个 Windows PowerShell 脚本来为调度程序创建请求以保持调度程序处于活动状态。它解决了这个问题。 (代码包含在我下面的答案中)。 谢谢

c# api .net-core quartz.net quartz
2个回答
0
投票

我通常在 .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)
        {
            .....

0
投票

我创建了一个 powershell 脚本来为调度程序创建请求以保持调度程序处于活动状态。它解决了这个问题。 (因此我用这个答案编辑了上面的问题)

脚本:

$url = "http://localhost/someAtion"
Invoke-WebRequest -Uri $url

创建了一个 Windows 任务调度程序以在特定时间间隔执行此脚本。

© www.soinside.com 2019 - 2024. All rights reserved.