威尼斯人线上娱乐

学业调度框架,服务实现定时任务调度

1 4月 , 2019  

在大家一贯项目中平日会境遇定时职分,比如定时同步数据,定时备份数据,定时计算数据等,定时职务大家都通晓使用Quartz.net,此连串写的也是Quartz,但是以前,大家先用别的艺术做个简易的定时任务展开入门。

注:方今网上海人民广播广播台湾大学介绍Quartz.net的文章,甚至Quartz.net官网上的Tutorial都以1.0本子的,而以此类型在2.0本子对项目举办了比较大范围的改动,使得本来的多多事例都不能够运转,故写此文。由于本身是边学边用,加之技术写作水平皆有限,错误自然在所难免,望轻拍,作者将不定时更新完善此贴,希望能为索要的爱侣提供增派。

咱俩常见在某个情景下必要软件具有贰个电动执行有些职分的意义,不过又不指望一直开行软件,或许每一回都要手动的来运行软件,这时大家可能够考虑到windows服务了。

大家一般在一部分情景下要求软件具备3个自行执行某个职务的成效,可是又不期望一向开发银行软件,大概每便都要手动的来运行软件,那时我们可可以设想到windows服务了。

首先呢,我们明天友好先写四个简易的定时循环职务,话不多说,直接上代码:

1. 类别介绍

第叁创立三个windows服务项目(详细音信请参阅:C#创立Windows
Service(Windows
服务)基础教程

先是成立四个windows服务项目(详细新闻请参阅:C#开创Windows
瑟维斯(Windows 服务)基础教程

先是步:成立项目,新建二个类库:大家命名为TaskBase

    
于今的种类,业务数据是更为大,古板的协同处理格局有时候已经不能够满足用户供给,定时后台服务那种异步数据处理情势则稳步被世家接受。相信大家在平时的做事中也时不时遭逢数据同步,或是定时邮件,短信提醒等要求,Quartz.net(官网
)能够很好满足对多个windows服务的军管及监督,同时在有限匡助支付不难的意况下不失灵活,是丰裕了不起的功课调度框架。

    威尼斯人线上娱乐 1

    威尼斯人线上娱乐 2

第壹部:添加二个虚幻基础类BaseMonitor:

和其余多数开源项目同样Quartz.net也富含了别的多少个非凡的开源项目:

在创造好的连串中式点心击“单击此处切换来代码视图”切换成代码

在开立好的项目中式点心击“单击此处切换来代码视图”切换成代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TaskBase
{
    /// <summary>
    /// 监测基础抽象类
    /// </summary>
    public abstract class BaseMonitor
    {

        protected System.Threading.Thread _thread;
        /// <summary>
        /// 监控时间间隔(毫秒)
        /// </summary>
        public virtual int Interval { get; set; }

        public virtual string Name { get; set; }
        /// <summary>
        /// 监控器状态
        /// </summary>
        public virtual TaskState State { get; set; }
        public BaseMonitor(string name)
        {
            Name = name;
            _thread = new System.Threading.Thread(BaseRun);
            _thread.IsBackground = true;//获取或设置一个值,该值指示某个线程是否为后台线程
            _thread.Start();
            State = TaskState.运行;
        }
        private void BaseRun()
        {          
            while (State==TaskState.运行)
            {
                try
                {
                    Run();
                    System.Threading.Thread.Sleep(Interval);
                }
                catch (Exception ex)
                {
                    State = TaskState.异常;
                    PCore.Log.LogTextHelper.WriteErrorLog(this.GetType().Name + "监控出现错误,此监视器已暂停!", ex);
                }
            }
        }
        protected virtual void Run()
        { }
    }
}

大旨   —-Common.Logging(通用日志接口)

大家最首要关怀一下八个办法:

咱俩第2关切一下四个主意:

(代码中PCore.Log.LogTextHelper.WriteErrorLog
是3个写文本日志的措施,可自行写个此格局。)

         —-C5(泛型集合类)

  • OnStart – 控制伏务运营
  • OnStop – 控战胜务甘休

  • OnStart – 控克制务运转
  • OnStop – 控战胜务结束

 注:此定时义务基础类 是用 System.Threading.Thread
完结,当中 TaskState为3个枚举来代表职分的情况:

示范程序

学业调度框架,服务实现定时任务调度。  例:

  例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TaskBase
{
   public enum TaskState
    {
        未开始=0,
        运行=1,
        暂停=2,
        异常=3
    }
}

         —-log4net(日志记录-通用日志接口完成)

威尼斯人线上娱乐 3威尼斯人线上娱乐 4

威尼斯人线上娱乐 5威尼斯人线上娱乐 6

其三部:添加1个连任BaseMonitor的TestMontior类,代码如下:

         —-topshelf(跨平台服务宿主程序)

 1     public partial class Service1 : ServiceBase
 2     {
 3         public Service1()
 4         {
 5             InitializeComponent();
 6         }
 7 
 8         protected override void OnStart(string[] args)
 9         {
10             //todo:这里是服务启动所执行的代码
11         }
12 
13         protected override void OnStop()
14         {
15             //todo:这里是服务停止所执行的代码
16         }
17     }
 1     public partial class Service1 : ServiceBase 2     { 3         public Service1() 4         { 5             InitializeComponent(); 6         } 7  8         protected override void OnStart(string[] args) 9         {10             //todo:这里是服务启动所执行的代码11         }12 13         protected override void OnStop()14         {15             //todo:这里是服务停止所执行的代码16         }17     }
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TaskBase
{
   public class TestMontior:BaseMonitor
    {
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="name">检测器名称</param>
        public TestMontior(string name) : base(name)
        {
        }
        /// <summary>
        /// 监控时间间隔(毫秒)
        /// </summary>
        public override int Interval
        {
            get
            {
              return  GlobalConfig.TestMonitorInterval;
            }          
        }
        public override string Name
        {
            get
            {
                return base.Name;
            }

            set
            {
                base.Name = value;
            }
        }

        public override TaskState State
        {
            get
            {
                return base.State;
            }

            set
            {
                base.State = value;
            }
        }
        protected override void Run()
        {          
            PCore.Log.LogTextHelper.WriteLog("TestMontitor监测器正在监测");
        }
    }
}

  Quartz.net使用的许可是Apache
License,商业友好,使用者能够修改源码用于开源或买卖项目,只需包含许可及修改表达。

View Code

View Code

注:TestMontior
约等于大家的Job,代码中 GlobalConfig是自身定义的贰个大局参数类:

2. Quartz.net开销思路

 下边大家得以写几个定时职责的意义了:

上边大家能够写二个定时职分的效能了:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TaskBase
{
   public static class GlobalConfig
    {
        public static int TestMonitorInterval
        {
            get { return 100 * 10; }
        }

        public static List<BaseMonitor> Monitor = new List<BaseMonitor>();
    }
}

 

  

  

始建达成以往正是其一样子:

  大家来打探下Quartz.net中常用的多少个概念:

 1      private void StartDoSomething()
 2         {
 3             System.Timers.Timer timer = new System.Timers.Timer(10000); //间隔10秒
 4             timer.AutoReset = true;
 5             timer.Enabled = false;  //执行一次
 6             timer.Elapsed += new ElapsedEventHandler(ExecutionCode);
 7             timer.Start();
 8         }
 9 
10         private void ExecutionCode(object source, System.Timers.ElapsedEventArgs e)
11         {
12             string dtNow = DateTime.Now.ToString("HH:mm");
13             if (dtNow == "12:00")
14             {
15                 File.WriteAllText("D:/ExecutionService.txt", "服务执行了一次任务", Encoding.UTF8);
16             }
17         }
 1      private void StartDoSomething() 2         { 3             System.Timers.Timer timer = new System.Timers.Timer(10000); //间隔10秒 4             timer.AutoReset = true; 5             timer.Enabled = false;  //执行一次 6             timer.Elapsed += new ElapsedEventHandler(ExecutionCode); 7             timer.Start(); 8         } 9 10         private void ExecutionCode(object source, System.Timers.ElapsedEventArgs e)11         {12             string dtNow = DateTime.Now.ToString("HH:mm");13             if (dtNow == "12:00")14             {15                 File.WriteAllText("D:/ExecutionService.txt", "服务执行了一次任务", Encoding.UTF8);16             }17         }

威尼斯人线上娱乐 7

  Scheduler  ———主调度程序 ——— Quartz主旨

接下来在OnStart的点子中调用上边的StartDoSomething的点子

接下来在OnStart的章程中调用上边的StartDoSomething的章程

定时职务的底蕴类库已经创办完结,上边我们来看怎么使用它。

  Job        ———作业  ——— 服务要做的(业务操作)

1         protected override void OnStart(string[] args)
2         {
3             StartDoSomething();
4         }    
1         protected override void OnStart(string[] args)2         {3             StartDoSomething();4         }    

 第4部:在WEB中采取:创制多少个WEB 
MVC项目,引用TaskBase,然后在Global.asax中添加以下代码:

  Trigger     ———触发器  ——— 服务实践规则(何时实施操作)

上述就足以算是一个简易的定时执行任务的windows服务了,那里大家还足以应用Quartz.Net来达成更为强硬的任务调度效用。

上述就足以算是贰个不难易行的定时执行职责的windows服务了,那里我们还足以选拔Quartz.Net来兑现更为强硬的职分调度作用。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

namespace WebTaskTest
{
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);


           TaskBase.GlobalConfig.Monitor.Add(new TaskBase.TestMontior("测试监控器Test"));//注册定时任务


        }
    }
}

  Listener    ———事件监听器  ——— 执行期事件(Job执行前后/
Scheduler运维终止暂停时应该做怎么样,能够挂一些一定事件)

 

先是来介绍一下Quartz.Net这几个框架:

运作WEB站点,查看日志如下:

  理解了那些概念之后,咱们就足以结合这么些概念并整理出开发的思绪:

首先来介绍一下Quartz.Net那么些框架:

  简介:Quartz.Net是二个开源的任务调度框架,万分有力,能够由此简单的安插协助我们定时具体的操作。相对于大家用的线程里面while然后sleep来施行有些操作,应该算的上是高端,大气,上档次了。近来流行版本是2.2,新的版本里面有些措施名发生了变通,以前面的本子用过来的人相应会有体会.这里自个儿动用最常用,也是最安静的不二法门–Windows服务内部使用Quartz.net,并且动用安排的格局来设置触发器。

威尼斯人线上娱乐 8

 
先采用SchedulerFactory创设3个Scheduler,运转Scheduler,之后构建Job和Trigger,若有作业监听须要,在Listener上添加相应的处理程序,再将Job和Trigger关联后放入Scheduler

  简介:Quartz.Net是二个开源的任务调度框架,卓殊强大,能够通过简单的配备扶助我们定时具体的操作。相对于大家用的线程里面while(true)然后sleep来实施有些操作,应该算的上是高端,大气,上档次了。如今最新版本是2.2,新的版本里面有个别措施名发生了变化,以前边的本子用过来的人应有会有体会.那里本身利用最常用,也是最安静的办法–Windows服务之中使用Quartz.net,并且选择安插的点子来安装触发器。(以上内容摘自互联网)

  简单的领悟正是它能够帮大家定时的工作,约等于闹钟能够叫大家起床一样。

能够观察一分钟执行1遍,因为我们在GlobalConfig.TestMonitorInterval设置的就是一分钟。

3. Quartz.net的简便利用

  简单的明白正是它亦可帮大家定时的干活,相当于闹钟能够叫大家起床一样。

威尼斯人线上娱乐,  近期风靡的本子是Quartz.NET 2.2.3豪门能够在此地下载

上面大家看怎么样在windows
server中哪些采纳:

               1. 新建多个控制台程序,引用Quartz.dll和Common.Logging.dll

  近年来最新的版本是Quartz.NET
2.2.3 大家能够在此间下载

  未来我们须求在刚刚创设的服务项目中引用如下文件:

创建一个WindowsServerTest类库,引用TaskBse,添加二个windows服务:

              
2. 新建四个类,命名为SampleJob,继承并贯彻接口Quartz.IJob         

 

    威尼斯人线上娱乐 9

using Quartz;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;

namespace WindowsServerTest
{
    partial class TestService : ServiceBase
    {
        public TestService()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            try
            {
                // TODO: 在此处添加代码以启动服务。
                PCore.Log.LogTextHelper.WriteLog("OnStart:Test服务开始...");

               TaskBase.GlobalConfig.Monitor.Add(new TaskBase.TestMontior("测试监控器Test"));//注册监视器




            }
            catch (Exception ex)
            {
                PCore.Log.LogTextHelper.WriteErrorLog("出错了",ex);
            }
        }

        protected override void OnStop()
        {

            // TODO: 在此处添加代码以执行停止服务所需的关闭操作。
            PCore.Log.LogTextHelper.WriteLog("OnStop:Test服务结束...");
        }
        protected override void OnPause()
        {
            PCore.Log.LogTextHelper.WriteLog("OnPause:Test服务暂停...");
        }
        protected override void OnContinue()
        {
            PCore.Log.LogTextHelper.WriteLog("OnContinue:Test服务继续...");
        }
    }
}

威尼斯人线上娱乐 10威尼斯人线上娱乐 11View Code

  未来大家需求在刚刚制造的服务项目中援引如下文件:

  在布局文件中写好和谐的布署(本例子演示定时访问钦定网站)

至于windows服务的设置卸载可自动百度,再此不多哔哔了。

public class SampleJob : IJob
    {
        public void Execute(IJobExecutionContext context)
        {
            File.AppendAllText("C:\\Quartz.txt", "SampleJob Is Run");
            File.AppendAllText("C:\\Quartz.txt", Environment.NewLine);  
        }
    }

    威尼斯人线上娱乐 12

威尼斯人线上娱乐 13威尼斯人线上娱乐 14

安装好服务起头后,大家查阅下日志如下:

             
3.在Program.cs的main方法中写如下代码后运营这么些决定台会程序会意识已经SampleJob中的Execute方法已经执行

  在布置文件中写好和谐的铺排(本例子演示定时访问钦命网站)

 1 <?xml version="1.0"?> 2 <configuration> 3   <configSections> 4     <sectionGroup name="JobList"> 5       <section name="Job" type="MyService1101.MyConfigHandler,MyService1101"/> 6     </sectionGroup> 7   </configSections> 8   <startup> 9     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />10   </startup>11   <JobList>12     <Job>   <!--这里是一个任务节点-->13       <add key="Url" value="http://www.baidu.com" />  <!--需要访问的Url-->14       <add key="Hour" value="10" />   <!--开始时间小时,注意:这里的小时为0-23,如果是1点的话就是1,而不是01-->15       <add key="Minute" value="30"/>    <!--开始时间分钟,注意:同上0-59-->16     </Job>17   </JobList>18 </configuration>

 威尼斯人线上娱乐 15

 

威尼斯人线上娱乐 16威尼斯人线上娱乐 17

View Code

 

威尼斯人线上娱乐 18威尼斯人线上娱乐 19View Code

 1 <?xml version="1.0"?>
 2 <configuration>
 3   <configSections>
 4     <sectionGroup name="JobList">
 5       <section name="Job" type="MyService1101.MyConfigHandler,MyService1101"/>
 6     </sectionGroup>
 7   </configSections>
 8   <startup>
 9     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
10   </startup>
11   <JobList>
12     <Job>   <!--这里是一个任务节点-->
13       <add key="Url" value="http://www.baidu.com" />  <!--需要访问的Url-->
14       <add key="Hour" value="10" />   <!--开始时间小时,注意:这里的小时为0-23,如果是1点的话就是1,而不是01-->
15       <add key="Minute" value="30"/>    <!--开始时间分钟,注意:同上0-59-->
16     </Job>
17   </JobList>
18 </configuration>

  新建三个MyConfigHandler.cs类来读取自定义配置节点

此节中大家大致做了3个定时职务,下章大家将进行Quartz.net职责框架的介绍。(源代码会尾随前边的事例一并上传),请继续关注之后章节。

  ISchedulerFactory  factory = new StdSchedulerFactory();
            IScheduler scheduler = factory.GetScheduler();
            scheduler.Start();
            IJobDetail job = JobBuilder.Create<SampleJob>().WithIdentity("SampleJob", "JobGroup1").Build();
            ITrigger trigger = TriggerBuilder.Create().StartNow().Build();
            scheduler.ScheduleJob(job, trigger);

View Code

威尼斯人线上娱乐 20威尼斯人线上娱乐 21

 

4. 使用topshelf创建WINDOWS服务

 

 1 public class MyConfigHandler : IConfigurationSectionHandler 2     { 3         public MyConfigHandler() 4         { 5         } 6  7         public object Create(object parent, object configContext, System.Xml.XmlNode section) 8         { 9             NameValueCollection configs;10             NameValueSectionHandler baseHandler = new NameValueSectionHandler();11             configs = (NameValueCollection)baseHandler.Create(parent, configContext, section);12             return configs;13         }14     }

      注:此部分张善友同学早已写过
),此节为力保思路连贯,不难介绍并援引部分代码**  

  新建2个MyConfigHandler.cs类来读取自定义配置节点

View Code

 
可能某些网络朋友会疑问,以控制台程序当做劳动宿主还并未意思的,那时轮到Topshelf出场了,
使用它能够很便利的营造跨平台服务寄主,而在调节和测试时向来以控制台的款型运营即可,相当有利。
我们引入topshelf.dll及
log4net.dll(topshelf供给),将事先main中代码放到服务类里,把main方法成为Host创设

威尼斯人线上娱乐 22威尼斯人线上娱乐 23

  然后新建1个SystemScheduler类来创建调度程序

             服务类代码:

 1 public class MyConfigHandler : IConfigurationSectionHandler
 2     {
 3         public MyConfigHandler()
 4         {
 5         }
 6 
 7         public object Create(object parent, object configContext, System.Xml.XmlNode section)
 8         {
 9             NameValueCollection configs;
10             NameValueSectionHandler baseHandler = new NameValueSectionHandler();
11             configs = (NameValueCollection)baseHandler.Create(parent, configContext, section);
12             return configs;
13         }
14     }

威尼斯人线上娱乐 24威尼斯人线上娱乐 25

威尼斯人线上娱乐 26威尼斯人线上娱乐 27View Code

View Code

 1     public class SystemScheduler 2     { 3         private SystemScheduler() 4         { 5         } 6  7         public static SystemScheduler CreateInstance() 8         { 9             return new SystemScheduler();10         }11 12         private IScheduler _scheduler;13 14         public void StartScheduler()15         {16             //这里读取配置文件中的任务开始时间17             int hour = int.Parse(((NameValueCollection)ConfigurationSettings.GetConfig("JobList/Job"))["Hour"]);18             int minute = int.Parse(((NameValueCollection)ConfigurationSettings.GetConfig("JobList/Job"))["Minute"]);19 20             ISchedulerFactory schedulerFactory = new StdSchedulerFactory();//内存调度21             _scheduler = schedulerFactory.GetScheduler();22 23             //创建一个Job来执行特定的任务24             IJobDetail synchronousData = new JobDetailImpl("SynchronousData", typeof(SynchronousData));25             //创建并定义触发器的规则(每天执行一次时间为:时:分)26             ITrigger trigger =27                 TriggerBuilder.Create()28                     .WithDailyTimeIntervalSchedule(29                         a => a.WithIntervalInHours(24).OnEveryDay().StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(hour, minute))).Build();30             //将创建好的任务和触发规则加入到Quartz中31             _scheduler.ScheduleJob(synchronousData, trigger);32             //开始33             _scheduler.Start();34         }35 36         public void StopScheduler()37         {38             _scheduler.Shutdown();39         }40     }
  public class SampleService
    {
        ISchedulerFactory factory;
        IScheduler scheduler;
        public void Start()
        {
            File.AppendAllText("C:\\Quartz.txt", "SampleService Is Run");
            File.AppendAllText("C:\\Quartz.txt", Environment.NewLine);
            factory = new StdSchedulerFactory();
            scheduler = factory.GetScheduler();
            scheduler.Start();
            IJobDetail job = JobBuilder.Create<SampleJob>().WithIdentity("SampleJob", "JobGroup1").Build();
            ITrigger trigger = TriggerBuilder.Create().StartNow().Build();          
            scheduler.ScheduleJob(job, trigger);
        }
        public void Stop()
        {
            scheduler.Clear();
            File.AppendAllText("C:\\Quartz.txt", "SampleService Is Stop");
            File.AppendAllText("C:\\Quartz.txt", Environment.NewLine);
        }
    }

 

View Code

 

  然后新建1个SystemScheduler类来创建调度程序

  新建1个SynchronousData类,让其促成IJob接口来落到实处SystemScheduler中自定义的任务

            修改后的Main代码

威尼斯人线上娱乐 28威尼斯人线上娱乐 29

威尼斯人线上娱乐 30威尼斯人线上娱乐 31

威尼斯人线上娱乐 32威尼斯人线上娱乐 33View Code

 1     public class SystemScheduler
 2     {
 3         private SystemScheduler()
 4         {
 5         }
 6 
 7         public static SystemScheduler CreateInstance()
 8         {
 9             return new SystemScheduler();
10         }
11 
12         private IScheduler _scheduler;
13 
14         public void StartScheduler()
15         {
16             //这里读取配置文件中的任务开始时间
17             int hour = int.Parse(((NameValueCollection)ConfigurationSettings.GetConfig("JobList/Job"))["Hour"]);
18             int minute = int.Parse(((NameValueCollection)ConfigurationSettings.GetConfig("JobList/Job"))["Minute"]);
19 
20             ISchedulerFactory schedulerFactory = new StdSchedulerFactory();//内存调度
21             _scheduler = schedulerFactory.GetScheduler();
22 
23             //创建一个Job来执行特定的任务
24             IJobDetail synchronousData = new JobDetailImpl("SynchronousData", typeof(SynchronousData));
25             //创建并定义触发器的规则(每天执行一次时间为:时:分)
26             ITrigger trigger =
27                 TriggerBuilder.Create()
28                     .WithDailyTimeIntervalSchedule(
29                         a => a.WithIntervalInHours(24).OnEveryDay().StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(hour, minute))).Build();
30             //将创建好的任务和触发规则加入到Quartz中
31             _scheduler.ScheduleJob(synchronousData, trigger);
32             //开始
33             _scheduler.Start();
34         }
35 
36         public void StopScheduler()
37         {
38             _scheduler.Shutdown();
39         }
40     }
 1     public class SynchronousData : IJob 2     { 3         public void Execute(IJobExecutionContext context) 4            { 5             string Url = ((NameValueCollection)ConfigurationSettings.GetConfig("JobList/Job"))["Url"]; 6             WebClient wc = new WebClient(); 7             WebRequest wr = WebRequest.Create(new Uri; 8             using (StreamWriter sw = File.AppendText(@"d:\SchedulerService.txt")) 9             {10                 sw.WriteLine("------------------" + "MyService服务在:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "     执行了一次任务" + "------------------");11                 sw.Flush();12             }13         }14     }
        static void Main(string[] args)
        {
            var host = HostFactory.New(x =>
            {
                x.EnableDashboard(); x.Service<SampleService>(s =>
{
    s.SetServiceName("SampleService"); s.ConstructUsing(name => new SampleService());
    s.WhenStarted(tc => { tc.Start(); });
    s.WhenStopped(tc => tc.Stop());
});
                x.RunAsLocalSystem();
                x.SetDescription("SampleService Description");
                x.SetDisplayName("SampleService");
                x.SetServiceName("SampleService");
            });
            host.Run();

        }

View Code

View Code

 

 

  最终在OnStart中添加对这几个调度程序的采纳

            编写翻译后,cmd进到exe所在目录,并执行”项目名.exe
install/uninstall” 完毕劳动的装置与卸载

  新建一个SynchronousData类,让其落到实处IJob接口来兑现SystemScheduler中自定义的任务

1         protected override void OnStart(string[] args)2         {3             SystemScheduler _systemScheduler = SystemScheduler.CreateInstance();4             _systemScheduler.StartScheduler();5         }   

 

威尼斯人线上娱乐 34威尼斯人线上娱乐 35

  程序生成后大家能够透过指令安装它

 1     public class SynchronousData : IJob
 2     {
 3         public void Execute(IJobExecutionContext context)
 4            {
 5             string Url = ((NameValueCollection)ConfigurationSettings.GetConfig("JobList/Job"))["Url"];
 6             WebClient wc = new WebClient();
 7             WebRequest wr = WebRequest.Create(new Uri(Url));
 8             using (StreamWriter sw = File.AppendText(@"d:\SchedulerService.txt"))
 9             {
10                 sw.WriteLine("------------------" + "MyService服务在:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "     执行了一次任务" + "------------------");
11                 sw.Flush();
12             }
13         }
14     }

威尼斯人线上娱乐 36

View Code

  安装到位后在服务中会有2个新的劳务项

 

  威尼斯人线上娱乐 37

  最终在OnStart中添加对这么些调度程序的运用

  程序运转过后会在D:盘生成3个SchedulerService.txt文件

1         protected override void OnStart(string[] args)
2         {
3             SystemScheduler _systemScheduler = SystemScheduler.CreateInstance();
4             _systemScheduler.StartScheduler();
5         }   

  威尼斯人线上娱乐 38

 

  本程序源码:下载

  程序生成后大家得以由此指令安装它

威尼斯人线上娱乐 39威尼斯人线上娱乐 40

威尼斯人线上娱乐 41

  安装完结后在劳务中会有3个新的劳务项

  威尼斯人线上娱乐 42

  程序运维过后会在D:盘生成三个SchedulerService.txt文件

  威尼斯人线上娱乐 43

 

  本程序源码:下载

威尼斯人线上娱乐 44

威尼斯人线上娱乐 45


相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图