这里只是一个简单的后台开发框架。说白了就是为了方便开发,就是单纯的想专注于开发业务逻辑,不想每次新建后台服务的时候花太多时间在项目结构,服务安装,调度处理上。
最简单的用法就是,把代码下下来后,直接用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后台定时服务框架的更多相关文章

  1. 使用Quartz Job 简单的做一个定时服务

    第一步:创建一个windows服务 第二步:通过NuGet 安装Quartz (我搜索了Quartz 关键字 安装了 ) 第三步 代码部分 任务类 如 多个任务 就多几个类 public class ...

  2. .Net Core 分布式微服务框架介绍 - Jimu

    系列文章 .Net Core 分布式微服务框架介绍 - Jimu .Net Core 分布式微服务框架 - Jimu 添加 Swagger 支持 一.前言 近些年一直浸淫在 .Net 平台做企业应用开 ...

  3. Net Core 分布式微服务框架

    Jimu : .Net Core 分布式微服务框架介绍 https://www.cnblogs.com/grissom007/p/9291345.html 一.前言 近些年一直浸淫在 .Net 平台做 ...

  4. 微服务框架 ketchup 介绍

    1.背景 在ketchup诞生之前.期间也是用surging开发了两个项目.奈何surging没有文档,升级之后,只能从头在读一遍源码,了解新功能,会消耗大量的时间.商业化也使一些 想学习微服务的人望 ...

  5. YoyoGo微服务框架入门系列-基本概念

    前言 Github开源:github.com/yoyofx/yoyogo 还请多多Star 之前简单介绍了YoyoGo微服务框架的基本内容,接下来了解下框架中的基本概念. 从一个简单Web服务Demo ...

  6. Taurus.MVC 微服务框架 入门开发教程:项目部署:1、微服务应用程序常规部署实现多开,节点扩容。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  7. Taurus.MVC 微服务框架 入门开发教程:项目部署:2、让Kestrel支持绑定多个域名转发,替代Ngnix使用。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  8. Taurus.MVC 微服务框架 入门开发教程:项目部署:3、微服务应用程序版本升级:全站升级和局部模块升级。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  9. Taurus.MVC 微服务框架 入门开发教程:项目集成:1、服务端:注册中心、网关(提供可运行程序下载)。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

随机推荐

  1. asp.net core教程 (二)

    Asp.net Core环境设置 Asp.net Core环境设置 安装Microsoft Visual Studio 2015 Asp.Net Core是Asp.Net的一个重大的重新设计. 这个话 ...

  2. 【锋利的jQuery】中全局事件ajaxStart、ajaxStop不执行

    最近一直都在研究[锋利的jQuery],确实是一本好书,受益匪浅.但由于技术发展及版本更新等原因,里面还是有些坑需要踩的. 比如:第六章七节中提到的全局事件ajaxStart.ajaxStop照着案例 ...

  3. [转]TOMCAT配置多端口

    一.Tomcat 安装后本身提供了一个server,端口配置默认是8080,对应目录为:..\Tomcat 6.0\webapps二.Tomcat 6.0 配置多个端口,其实也就是给Tomcat增加几 ...

  4. iframe访问子页面方法

    在Iframe中调用子页面的Js函数 调用IFRAME子页面的JS函数 说明:假设有2个页面,index.html和inner.html.其中index.html中有一个iframe,这个iframe ...

  5. 性能测试常用sql技巧_Oracle

    做了一段时间的性能测试,把自己在性能测试过程中,使用到的Oracle中用到的sql语句整理一番,做个备忘: (1)多个字段以某种格式拼接 "||"字符串拼接符; 示例:将" ...

  6. 数据处理包dplyr的函数

    dplyr专注处理dataframe对象, 并提供更稳健的与其它数据库对象间的接口. 一.5个关键的数据处理函数: select()   返回列的子集filter()     返回行的子集arrang ...

  7. 使用 Socket.IO 开发聊天室

    前言 Socket.IO 是一个用来实现实时双向通信的框架,其本质是基于 WebSocket 技术. 我们首先来聊聊 WebSocket 技术,先设想这么一个场景: · 用户小A,打开了某个网站的充值 ...

  8. Nodejs的模块系统以及require的机制

    一.简介 Nodejs 有一个简单的模块加载系统.在 Nodejs 中,文件和模块是一一对应的(每个文件被视为一个独立的模块),这个文件可能是 JavaScript 代码,JSON 或者编译过的C/C ...

  9. Transparent Application Failover 透明应用切换

    官方文档地址 http://docs.oracle.com/cd/E11882_01/network.112/e41945/advcfg.htm#NETAG455 About Transparent ...

  10. Jquery DataTables 使用AJAX POST的问题

    最近项目在用需要用表格,听说DataTables很好很强大,于是用了一下. Get请求没什么问题,问题处在POST请求上 Jquery原生的POST请求没有问题,代码如下 $.ajax({   url ...