WinServiceTaskWindows計(jì)劃任務(wù)框架
一、功能摘要:
1. 啟動(dòng)觸發(fā)時(shí)間采用開源的Quartz.Net項(xiàng)目的Cron表達(dá)式:"0 0 12 * * ?" 每天中午12點(diǎn)觸發(fā);
2. 多線程運(yùn)行各任務(wù),互不干擾;
3. 自動(dòng)監(jiān)視配置文件,配置文件更改后服務(wù)重啟;
4. 配置Tasks.config中可以引用公用的資源;
5. 具體任務(wù)中可以引用公有資源,并加入本任務(wù)對應(yīng)的相關(guān)參數(shù);
6. 具體任務(wù)配置中加上Settings設(shè)置,方便加入一些配置信息,如果還是不能滿足,那么就要自定義Extend的擴(kuò)展了。
二、運(yùn)行機(jī)制:
1. 每個(gè)任務(wù)做為一個(gè)獨(dú)立的運(yùn)行線程 隱喻:工人
2. 服務(wù)本身做為一個(gè)獨(dú)立線程 隱喻:監(jiān)督工人
3. 監(jiān)督工人每隔 N 秒輪詢一次任務(wù),如發(fā)現(xiàn)任務(wù)的觸發(fā)時(shí)間小于間隔N 即創(chuàng)建該任務(wù)并且啟動(dòng)該任務(wù)。
4. 啟動(dòng)后的任務(wù)根據(jù)啟動(dòng)時(shí)間于特定時(shí)間執(zhí)行任務(wù)。
5. 工人工作完本身任務(wù)后自動(dòng)停止。待下一輪監(jiān)督工人查看時(shí)清除任務(wù)對象。
三、任務(wù)驅(qū)動(dòng)UML圖
UML類圖
四、項(xiàng)目內(nèi)容:
1. support 調(diào)用的一些外部類庫
2. CS.Scheduling.Framework 任務(wù)調(diào)度框架
3. CS.Scheduling.NUnitTests 一些測試,這個(gè)隨便寫的
4. CS.Task.DataTransfer 一個(gè)數(shù)據(jù)轉(zhuǎn)存的任務(wù)示例(DataTableToDataTable已經(jīng)完成)
5. CS.WinServiceManager WindwosService的服務(wù)管理器,這個(gè)可以算是一個(gè)分支了。用來安裝和管理實(shí)現(xiàn)本框架的AppForm。
6. CS.WinServiceTask WindsService的實(shí)現(xiàn)示例,該Demo直接調(diào)用任務(wù)調(diào)度框架。
五、任務(wù)實(shí)現(xiàn)代碼:
1. 參見CS.Task.DataTransfer.TaskDemo的示例實(shí)現(xiàn)及CS.Task.DataTransfer.DataTableToDataTable實(shí)用實(shí)現(xiàn)
2. 繼承TaskProvider類后,重寫protected override Result Work() 即可。
3. 如果自已擴(kuò)展了Extend節(jié)點(diǎn),則要重寫public override void InitExtend()方法
4. 具體備置可參見Tasks.config文件
六、WindService的調(diào)試:
1. 方法一:打開控制臺(tái),拖入CS.WinService.Demo的執(zhí)行程序(該程序還是WinService)加上任一參數(shù) 如:-t 后回車
2. 方法二:通過CS.WinServiceManager安裝服務(wù)。啟用UDP監(jiān)視器查看即。
