我是靠谱客的博主 心灵美盼望,最近开发中收集的这篇文章主要介绍WebAPI项目添加定时服务,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

开发平台:

VS2019

背景:

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

设计思路与实现步骤:

1.准备把access_token存在数据库中,如前端需要调小程序接口,通过我的后端去调小程序公开的接口。

2.我的webapi部署在IIS上,所以在Global.asax启动站点的时候,在Application_Start方法下添加我的定时任务。如下图

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

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

AccessTokenJobSchedule.RunScheduler()代码如下:

 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了

 

转载于:https://www.cnblogs.com/evanmemo/p/11051235.html

最后

以上就是心灵美盼望为你收集整理的WebAPI项目添加定时服务的全部内容,希望文章能够帮你解决WebAPI项目添加定时服务所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部