如何使计划保持活动状态(使用 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 任务计划程序以按特定时间间隔执行此脚本。
如何保持时间表(使用 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 任务计划程序以按特定时间间隔执行此脚本。