简单的.NET后台定时服务框架
这里只是一个简单的后台开发框架。说白了就是为了方便开发,就是单纯的想专注于开发业务逻辑,不想每次新建后台服务的时候花太多时间在项目结构,服务安装,调度处理上。
最简单的用法就是,把代码下下来后,直接用vs打开。参照task的例子去写逻辑就ok了。
框架本身实现了
1.服务安装
框架本身是使用Topshelf进行服务安装,可以设置名称和描述,安装后直接可以在,这些都可以直接配置在app.config中
2.任务控制
框架提供了一个基类:ServiceBase,基类里面实现了 任务休眠和调度
任务的控制都是通过:Config/ServicesConfig.json配置文件管理
代码下载下来后的结构如下:
下面将使用框架创建一个每隔一分钟ping一次baidu.com的任务
1.在Services项目的Tasks文件夹中新建一个类 PingTask 继承于ServiceBase
2.PingTask实现Exec方法,在方法中实现ping逻辑 代码如下
using Services.Common; namespace Services.Tasks
{
class PingTask : ServiceBase
{
protected override void Exec()
{
ExecCmd("ping baidu.com");
} private void ExecCmd(string cmd)
{
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false; //是否使用操作系统shell启动
p.StartInfo.RedirectStandardInput = true;//接受来自调用程序的输入信息
p.StartInfo.RedirectStandardOutput = true;//由调用程序获取输出信息
p.StartInfo.RedirectStandardError = true;//重定向标准错误输出
p.StartInfo.CreateNoWindow = true;//不显示程序窗口
p.Start();//启动程序
//向cmd窗口发送输入信息
p.StandardInput.WriteLine(cmd+"&exit");
p.StandardInput.AutoFlush = true;
//获取cmd窗口的输出信息
string output = p.StandardOutput.ReadToEnd(); p.WaitForExit();//等待程序执行完退出进程
p.Close();
LogFactory.GetLogger().Info(string.Format("执行命令:{0}; 执行结果:{1}", cmd, ""));
}
}
}
3.在Config/ServicesConfig.json中添加配置节点
[
{ //每隔一分钟ping一次baidu.com
"ServiceName": "ping baidu.com任务",
"Assembly": "Services.exe",
"Methods": "Services.Tasks.PingTask",
"S_Interval": //间隔时间 单位秒
}
]
4.在App.config修改服务名称和描述
<appSettings>
<add key="ServiceName" value="PingService" />
<add key="Description" value="每隔一分钟ping一次baidu.com" />
<add key="DisplayName" value="PingService" />
</appSettings>
5.服务安装(注意要在 Release下生成的才会创建服务 在 Program 可以修改)
a.修改Install.bat和UnInstall.bat 确保里面的服务名称和App.config中的ServiceName一致
b.运行Install.bat
c.打开服务管理器(win+R 输入 services.msc) 可以看到服务正在运行
一个最基础的服务就完成了,如果想在这个基础上开启多个ping服务,分别ping不同的地址
首先,修改PingTask代码 中的 ExecCmd("ping baidu.com"); 改为 ExecCmd(Config.Param);
代码如下
protected override void Exec()
{
ExecCmd(Config.Param);
}
修改 Config/ServicesConfig.json 节点 下面是同时ping baidu.com 和 qq.com 的2个任务
[
{ //每隔一分钟ping一次baidu.com
"ServiceName": "ping baidu.com任务",
"Assembly": "Services.exe",
"Methods": "Services.Tasks.PingTask",
"S_Interval": , //间隔时间 单位秒
"Param": "ping baidu.com" //自定义参数
},
{ //每隔一分钟ping一次qq.com
"ServiceName": "ping baidu.com任务",
"Assembly": "Services.exe",
"Methods": "Services.Tasks.PingTask",
"S_Interval": , //间隔时间 单位秒
"Param": "ping qq.com" //自定义参数
}
]
这里主要是利用Param参数进行传递需要执行的命令;
然后重启服务即可。
任务调度支持多种方式
0.按指定间隔时间执行
1.每天指定时间执行 每天一次
2.指定时间执行一次
3.每天指定开始和结束时间并且按照指定间隔时间执行
完整的配置参数
[
{ //全量配置 每天的 04点到06点执行,每次执行间隔60秒
"ServiceName": "ping baidu.com任务", //非空服务名称
"Assembly": "Services.exe", //非空程序集
"Methods": "Services.Tasks.PingTask", //非空执行类名 对应业务的类名
"ExecType": , //执行类型 ( 0:按指定间隔时间执行 1:每天指定时间执行 每天一次 2:指定时间执行一次 3.每天指定开始和结束时间并且按照指定间隔时间执行) 可空默认0
"S_Interval": , //间隔时间 单位秒 可空默认60
"M_Interval": , //间隔时间 单位分 可空默认0
"H_Interval": , //间隔时间 单位小时 可空默认0
"ExecDayTime": null, //ExecType为1时起效 每天指定时间执行 格式 HH:mm:ss 14:00:00 可空
"ExecDayStartTime": "04:00:00", //ExecType为3时起效 格式 HH:mm:ss 14:00:00 可空
"ExecDayEndTime": "06:00:00", //ExecType为3时起效 格式 HH:mm:ss 14:00:00 可空
"ExecTime": null, //ExecType为2时必填 指定时间执行一次 datetime yyyy-MM-dd HH:mm:ss 执行一次后结束
"Param": "ping baidu.com" //自定义参数
}
]
框架代码路径:框架代码
简单的.NET后台定时服务框架的更多相关文章
- 使用Quartz Job 简单的做一个定时服务
第一步:创建一个windows服务 第二步:通过NuGet 安装Quartz (我搜索了Quartz 关键字 安装了 ) 第三步 代码部分 任务类 如 多个任务 就多几个类 public class ...
- .Net Core 分布式微服务框架介绍 - Jimu
系列文章 .Net Core 分布式微服务框架介绍 - Jimu .Net Core 分布式微服务框架 - Jimu 添加 Swagger 支持 一.前言 近些年一直浸淫在 .Net 平台做企业应用开 ...
- Net Core 分布式微服务框架
Jimu : .Net Core 分布式微服务框架介绍 https://www.cnblogs.com/grissom007/p/9291345.html 一.前言 近些年一直浸淫在 .Net 平台做 ...
- 微服务框架 ketchup 介绍
1.背景 在ketchup诞生之前.期间也是用surging开发了两个项目.奈何surging没有文档,升级之后,只能从头在读一遍源码,了解新功能,会消耗大量的时间.商业化也使一些 想学习微服务的人望 ...
- YoyoGo微服务框架入门系列-基本概念
前言 Github开源:github.com/yoyofx/yoyogo 还请多多Star 之前简单介绍了YoyoGo微服务框架的基本内容,接下来了解下框架中的基本概念. 从一个简单Web服务Demo ...
- Taurus.MVC 微服务框架 入门开发教程:项目部署:1、微服务应用程序常规部署实现多开,节点扩容。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- Taurus.MVC 微服务框架 入门开发教程:项目部署:2、让Kestrel支持绑定多个域名转发,替代Ngnix使用。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- Taurus.MVC 微服务框架 入门开发教程:项目部署:3、微服务应用程序版本升级:全站升级和局部模块升级。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- Taurus.MVC 微服务框架 入门开发教程:项目集成:1、服务端:注册中心、网关(提供可运行程序下载)。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
随机推荐
- 用java来实现验证码功能。
昨天在网上看到了一篇关于验证码的文章,很不错,但是有些不尽人意的地方,比如没有考虑到前端传过来的验证码如果是小写的话,那么做验证的时候就会出现错误, 因为java是严格区分大小写的,还有就是验证码会重 ...
- ACL2016信息抽取与知识图谱相关论文掠影
实体关系推理与知识图谱补全 Unsupervised Person Slot Filling based on Graph Mining 作者:Dian Yu, Heng Ji 机构:Computer ...
- HTML5 客户端存储数据的两种方式
HTML5 提供了两种在客户端存储数据的新方法: localStorage - 没有时间限制的数据存储 sessionStorage - 针对一个 session 的数据存储 之前,这些都是由 coo ...
- homebrew & brew cask使用技巧及Mac软件安装
homebrew 安装 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/m ...
- Asp.Net生命周期的详解
一.Asp.Net页面生命周期的概念 当我们在浏览器地址栏中输入网址,回车查看页面时,这时会向服务器端IIS)发送一个request请求,服务器就会判断发送过来的请求页面,当完全识别 TTP页面处理程 ...
- MVC 5限制所有HTTP请求必须是POST
今天有位同事,提出了这样一个问题,他想限制所有MVC接收到的HTTP请求必须是POST方式. 接下来在下面的内容中,将我想到的方式分享给大家,如果大家有其它的方式,请留言. 一.HttpPostAtt ...
- 用户权限模块之oauth2.0
主要是在springsecurity上面扩展即可,所以内容也是基于上一个, sql: CREATE TABLE `auth_access_token` ( `id` int(11) NOT NULL ...
- iframe 父页面与子页面之间的方法的相互调用
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- final用法
1.修饰类 如果一个类被定义为final类型,那么该类无法被其他类继承,该类中的所有方法都是final类型的,字段是否是final类型取决于字段自身的定义. 2.修饰方法 一个方法被定义为final类 ...
- HTML5+CSS3静态页面项目-PayPaul的总结
学习前端有一段时间了,一直在看书上的理论知识,而实战项目却很少.师兄常说,想要知道自己的实力有多少,知识掌握了多少,最好的方法就是去实践了,实践出真知嘛.于是决定在这个假期里,主要是通过项目的实践以及 ...