WebAPI开发中的定时处理

您所在的位置:网站首页 定时推送 WebAPI开发中的定时处理

WebAPI开发中的定时处理

2023-09-29 02:14| 来源: 网络整理| 查看: 265

在WebAPI开发中会遇到一些需要定时或周期性处理的功能,比如每天早上6点从服务器下载数据或每隔半个小时查询统计数据等,有时也需要将数据向客户端推送。如何让web API也能处理定时或周期性的任务呢?

1.处理周期性任务

周期性的任务可以通过C#自带的Timer类来实现。具体思路就是创建一个Timer,定时去执行web API内的方法,再这个方法内可以执行具体的数据操作,也可以结合SignalR进行数据推送。具体实现如下:

1.1创建定时器 /// /// 定时任务辅助类 /// public class TimerHelper { //定时器 System.Threading.Timer timer; //定时间隔(分钟)-从配置文件中读取 private static int interval = int.Parse(System.Configuration.ConfigurationManager.AppSettings["TimerInterval"]); public TimerHelper() { timer = new System.Threading.Timer(TimerTask, null, 0, 1000 *60* interval); } /// /// 定时任务 /// /// public void TimerTask(object state) { //具体的方法 Controllers.CommonController common = new Controllers.CommonController(); common.BroadCast(); } } 1.2具体方法实现 /// /// 定时推送 /// [ApiExplorerSettings(IgnoreApi = true)] public void BroadCast() { //数据处理 //----略---- //数据查询 //----略---- //数据推送 Clients.All.AlarmCountRecord(); }

由于这个方法只是内部调用,不对外开放,所以将方法对外隐藏。如果集成有第三方推送服务,如个推、极光等,也可以将推送的相关代码放到这里,这样就能够每隔半个小时或一小时向移动应用上推送消息了。

2.处理定时任务

上一部分的周期性任务是从Web站点启动开始,每隔一定时间就执行特定的操作,所以起始时间是不确定的,间隔时间是确定的。 这部分所讲的定时任务则是另外一种情况,比如每天早上八点向查询数据后向用户发送一封邮件,不论Web站点何时启动,每天早上八点这个时间是不变的,时间间隔始终是一天。如果采用上一部分的思路,就是创建一个定时器,每秒执行一次,判断到当前时间为早上八点就执行相应的方法,但显然这样做太浪费了。想到Windows计划任务和Windows服务可以做这样的事,这样问题不就解决了? 具体思路是,创建一个Windows计划任务,每天早上八点执行,调用一个bat脚本,用来访问WebAPI接口,执行相关逻辑。下面是具体实现:

2.1创建WebAPI接口 public async Task Auto() { int num = 0; try { MailModel model = new MailModel() { ReceiverAddress = "",//收件人地址 ReceiverName = "",//收件人姓名 Title = "",//邮件标题 Content = "",//邮件内容 SenderAddress = "",//发件人地址 SenderName = "",//发件人姓名 SenderPassword = ""//发件人密码 }; bool result = MailHelper.SendMail(model); } catch (Exception) { num = -1; } return await Task.FromResult(num); }

这里写了一个用来发送邮件的接口作为示例。更详细例子看下面文章。

C#使用SMTP协议发送邮件(腾讯企业邮箱)

2.2安装curl

curl是利用URL语法在命令行方式下工作的开源文件传输工具,有了它,我们就可以自由调用web API接口了。安装过程可以百度,这里就不再赘述了。

2.3编写Windows脚本 @echo off echo "Start Send Mail..." curl -d "" http://localhost:51307/api/Mail/Auto echo "Finished"

脚本很简单,就是使用上一步安装的curl访问最开始创建的WebAPI接口。

2.4创建Windows计划任务

打开计算机管理>系统工具>任务计划程序。 这里写图片描述

点击“创建基本任务”开始创建计划任务。 这里写图片描述

选择触发器-每天 这里写图片描述

设定每天触发时间为早上八点。 这里写图片描述

选择操作>启动应用程序 这里写图片描述 选择上一步创建的Windos批处理程序。 这里写图片描述 最后完成创建。 这里写图片描述

以上步骤完成后,保存退出,之后每天早上八点就能收到邮件了。

本文中的两种定时处理情况是针对WebAPI中具体的需求所采取的解决方法,实际上还涉及了SignalR、邮件、Windows计划任务等。实际上针对这一类的轮询调度任务,如定时轮询数据库同步、定时邮件通知、定时数据处理等,可以使用开源的调度框架Quartz.NET。关于Quartz.NET的介绍将在以后的文章中推出。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3