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了

相關文章
相關標籤/搜索