Winform開發框架之通用定時服務管理

2021-09-08 00:26:57 字數 3605 閱讀 9124

做專案的時候,或多或少需要和其他外部系統或者介面進行資料互動,有些是單向的獲取,有些可能是修改狀態後再寫回去,不管如何,這個都可以稱之為資料同步操作,如人員資訊同步、業務資料同步、第三方介面資料同步等等。

資料同步涉及到乙個同步時間的問題,一般不敏感的資料,一天或者一周左右同步一次就可以了,有些可能需要間隔更短一點。

同步的邏輯不同,有些可能寫資料庫就可以了,有些可能需要訪問webservice或者其他介面,然後在進行資料獲取,儲存等操作,回寫的時候,也一般是呼叫webservice這樣的介面修改資料。

每個同步實現我們都需要做大量重複性工作,如windows服務安裝、解除安裝、或者基礎性的工作,有沒有一種方式可以隔離業務邏輯和常用的東西呢?

這樣的同步操作看似沒有很多必然的關聯性,但是,這些都是很常見的東西,如果以外掛程式架構方式來組織各個不同的業務封裝,通過引數配置實現同步間隔不同,核心的同步模組其實是很多類似的東西,而同步一般通過windows訪問進行,這樣通用的我們可以把它封裝成乙個通用的windows服務。再輔以乙個介面管理模組來管理服務的安裝、解除安裝、啟動、停止、測試等操作就可以了,整個window服務的外掛程式設計框架如下所示。

windows定時服務-檔案檢視如下所示:

以上架構,有幾個特點,

1、 基於外掛程式結構,擴充套件容易。

2、 乙個定時服務【通用的windows服務模組】,可以同時執行很多個不同的定時規則的定時服務應用。

3、 乙個通用的服務管理介面【windows定時服務管理】,來對定時服務的安裝、解除安裝、啟動、停止、測試等操作,並且可以對外掛程式進行視覺化配置。

4、【通用的windows服務模組】提供引數化安裝,解除安裝、測試的功能。

5、【windows定時服務管理】提供dos測試和winform進度測試的整合。

6、 外掛程式引數化配置,提供外掛程式各種引數的配置,統一排程。

6、外掛程式通過反射載入不同的定時服務應用,實現松耦合和強型別介面的轉換,確保彈性化和安全性。

7、整個定時服務管理模組,可以在不同的場合下實現重用,每次只是定時服務應用的不同而已。

8、定時時間設定,提供多樣化的設定,可以在間隔時間、每天整點執行、每月指定日期時間執行多種方式。

整個定時服務管理通用模組,可以最大化的實現工具重用、邏輯重用,不管業務場景如何變化,基本上不需要調整了,只需要把定時服務應用abc模組開發好,引數配置好,丟進去就可以了。

開發好的【windows定時服務管理】介面如下所示,執行後,會把xml文件裡面的外掛程式載入在下面的列表中,供檢視和修改操作。

外掛程式的xml配置資訊如下所示。

xml version="1.0"

?>

<

arrayofpluginsetting

>

<

pluginsetting

>

<

name

>測試名稱

name

>

<

description

>測試描述

description

>

<

servicecycleminutes

>1

servicecycleminutes

>

<

servicerunathour

>23

servicerunathour

>

<

servicerunatday

>1

servicerunatday

>

<

runmode

>0

runmode

>

<

plugintypename

>whc.pluginservice.classname,whc.pluginservice

plugintypename

>

pluginsetting

>

arrayofpluginsetting

>

單擊安裝服務,控制台程式呼叫dos命令+引數來實現通用定時windows服務的安裝。

安裝後,系統的windows服務列表中就會增加乙個【定時服務】的服務模組了,這樣就證明我們順利安裝了通用定時服務了。

定時服務控制台的狀態也會同時重新整理,並且把服務的狀態和型別顯示在【服務狀態】裡面,這個時候,可以對服務進行解除安裝、測試、停止服務、重新啟動、重新整理狀態等相關操作了。

如果對於很多定時服務應用,每種需要進行動態的禁用或者設定定時方式,那麼可以在列表上右鍵進行相關的操作。

在開發過程中,發現經常性的需要除錯我們自己的定時應用abc是否正確生成,可以通過【dos測試】和【進度測試】這兩個按鈕進行邏輯測試,這個沒有觸發windows的情況下進行呼叫,可以看到具體的效果如下所示。

一般來說,提供以上dos視窗來進行跟蹤除錯就可以了,但是有時候,我們想在winform程式中呼叫立即同步的操作的時候,可以使用進度測試的邏輯**進行處理,這樣可以在主介面中顯示進度。

由於是外掛程式架構,因此在和winform整合的時候,其實是和這個定時服務控制台一樣,我們在我們的winform程式中,載入應用外掛程式,進行呼叫就可以了,呼叫**如下所示。

private void btntestprogress_click(object sender, eventargs e)

】執行一次", key));}}

messageutil.showtips("操作完成");

}finally

}void timingplugin_progresschanged(object sender, progresschangedeventargs e)

thread.sleep(100);

}

呼叫進度測試的介面如下所示,它可以把各種同步詳細情況顯示在主介面上。

對於整個模組的執行操作,我們通過日誌進行記錄,這樣可以詳細看到具體的操作了。

Winform開發框架之介紹

框架已經正式改名為 yeswin開發框架,最新資料請前往 yeswinform 簡介 yes快速開發平台框架 yesdotnet.com winform開發框架,儘量減少程式設計師在介面中的 量和工作量,model自動生成,介面以及控制項自動生成,簡單的邏輯自動生成。自動生成的介面已經實現簡單邏輯增...

Winform開發之離線式WCF開發框架的實現介紹

在上篇隨筆 winform開發框架之框架演化 中介紹了幾種winform開發框架,其中有對於離線式wcf開發框架的介紹,離線式的wcf開發框架 就是結合了傳統winform開發框架的資料訪問方式,又利用了wcf分布式資料獲取的特點,使得資料可以離線使用,在一種業務要求集中化,又要求不影響正常業務操作...

Winform開發框架之資料曲線報表

在專案開發中,往往會碰到一些非常規的需求,每次碰到這種情況,都需要花費時間來整理自己的思路,然後參考網路上其他人的實現方式或者作法,有時候可以找到一些相同的模組進行改進即可符合需求,但往往很多是需要自己潛心研究,然後提煉優化,雖然探索過程還是比較開心,不過時間肯定是需要花不少的。我每次碰到這種情況,...