WebAPI项目添加定时服务

开发平台:前端

VS2019web

背景:数据库

在开发小程序的API服务的时候,因为access_token的有效期为7200秒,也就是2小时,这就须要后端定时的去更新这个access_token,便于调用小程序的一些接口。小程序

设计思路与实现步骤:后端

1.准备把access_token存在数据库中,如前端须要调小程序接口,经过个人后端去调小程序公开的接口。api

2.个人webapi部署在IIS上,因此在Global.asax启动站点的时候,在Application_Start方法下添加个人定时任务。以下图async

3.RunScheduler方法内Quartz.Net来建立任务调度器、建立做业和触发器等。ide

在VS中用NuGet管理器下载Quartz.Net并添加到指定的项目中去,以下图,我这里用的是VS2019测试

AccessTokenJobSchedule.RunScheduler()代码以下:ui

 1  public class AccessTokenJobSchedule
 2     {
 3         public static async Task RunScheduler()
 4         {
 5             // 建立做业调度器
 6             ISchedulerFactory factory = new StdSchedulerFactory();
 7             IScheduler scheduler = await factory.GetScheduler();
 8 
 9             // 启动调度器
10             await scheduler.Start();
11 
12             // 建立做业
13             IJobDetail job = JobBuilder.Create<UpdateAccessTokenJob>()
14                 .WithIdentity("job1", "group1")
15                 .Build();
16 
17             // 建立触发器,每10min执行一次
18             ITrigger trigger = TriggerBuilder.Create()
19                .WithIdentity("trigger1", "group1")
20                .StartNow()
21                .WithSimpleSchedule(x => x
22                    .WithIntervalInMinutes(10)
23                    .RepeatForever())
24                .Build();
25 
26             // 加入到做业调度器中
27             await scheduler.ScheduleJob(job, trigger);
28         }
View Code

上述代码中建立做业job中,UpdateAccessTokenJob类须要继承Quzrtz中的接口IJob,实现接口IJob中的方法Execute,在Execute方法中能够编写具体的方法,即须要定时去执行的操做。

IJobDetail job = JobBuilder.Create<UpdateAccessTokenJob>().WithIdentity("job1", "group1").Build();

UpdateAccessTokenJob类代码以下

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Threading.Tasks;
 5 using System.Web;
 6 using Quartz;
 7 using Quartz.Impl;
 8 using System.Configuration;
 9 
10 namespace WebAPI.ExtendFuncs
11 {
12     public class UpdateAccessTokenJob : IJob
13     {
14         public async Task Execute(IJobExecutionContext context)
15         {
16             //本身实现要定时执行的操做方法
17 
18         }
19 
20     }
21 }
View Code

------------------------------------------------------------------------------------------------------------以上代码基本实现

测试

在IIS中启动个人Global.asax,触发个人定时服务

 

查看数据库日志,我设定的是每10分钟执行个人操做

 事实没那么简单

这是什么缘由呢,原来是IIS这个东东自动回收了个人进程,以为我这个进程不是活跃的。

解决办法是配置你使用到的程序池配置,在程序池的高级设置中:

启动模式:AlwaysRunning

固定时间间隔(分钟):0

闲置超时(分钟):0

如今去重启个人页面测试,就OK了

相关文章
相关标签/搜索