|
1. 寫在前面
原本計劃從這篇文章開始,開始介紹活動的使用方式,但是考慮到很多在WF中,重要的類和概念都沒有清晰,所以還是在本文中繼續(xù)明確一下WF中重要的類的用法。
這節(jié)是純粹的理論知識,只是為你的后續(xù)學(xué)習(xí)打下一個基礎(chǔ),如果您不敢興趣,可以略過。
2. WorkflowRuntime類
WorkflowRuntime:工作流運(yùn)行時。
這個類有四個作用:
<1> 管理工作流運(yùn)行時
<2> 啟動和管理工作流實例
<3> 管理運(yùn)行時服務(wù)
<4> 處理運(yùn)行時事件
A . 管理工作流運(yùn)行時
管理工作流運(yùn)行時,涉及到兩個重要的方法:StartRuntime和StopRuntime。
StartRuntime:這個方法啟動工作流運(yùn)行時引擎和工作流運(yùn)行時引擎服務(wù),當(dāng)StartRuntime被調(diào)用時,會首先檢查運(yùn)行時核心服務(wù)是否被添加到運(yùn)行時中。核心服務(wù)即指:派生自 WorkflowCommitWorkBatchService(工作流事務(wù)服務(wù))和WorkflowSchedulerService(工作流調(diào)度服務(wù))的計劃程序服務(wù)。如果哪一個缺失,那么運(yùn)行時就會為每一個服務(wù)創(chuàng)建一個默認(rèn)的服務(wù),即:DefaultWorkflowCommitWorkBatchService服務(wù)和DefaultWorkflowSchedulerService服務(wù),然后將他們加載到運(yùn)行時服務(wù),之后通過服務(wù)的Start方法啟動服務(wù),并將IsStart屬性設(shè)置為true,并且觸發(fā)Started事件。
B. 啟動和管理工作流實例
首先需要的是創(chuàng)建一個工作流實例,我們常用的是使用工作流運(yùn)行時實例下的Create(type)方法來創(chuàng)建工作流實例。
然后用這個工作流實例的Start方法,啟動自身。
這個時候,如果工作流運(yùn)行時未開啟,也就是尚未調(diào)用WorkflowRuntime的Start方法,那么這時會自動地去調(diào)用Start開啟工作流運(yùn)行時。
C. 管理運(yùn)行時服務(wù)
WorkflowRuntimeService類:這個類是工作流運(yùn)行時引擎核心服務(wù)的抽象基類。我們把他叫做運(yùn)行時服務(wù)。這些服務(wù)運(yùn)行在工作流運(yùn)行時的環(huán)境下,對用戶不可見。例如我們之前提到的WorkflowSchedulerService,WorkflowCommitWorkBatchService服務(wù)都是派生自WorkflowRuntimeService類。
從WorkflowRuntimeService派生的服務(wù)都可以由工作流運(yùn)行引擎啟動或停止。
我們可以向運(yùn)行時服務(wù)增加或者刪除服務(wù),對應(yīng)的方法為AddService()和RemoveService()。
當(dāng)然,我們也可以獲得某一個工作流運(yùn)行時下的所有服務(wù):對應(yīng)方法為GetService()和GetAllServices()方法。
另外,我們可以去根據(jù)某一個運(yùn)行時服務(wù)的State屬性去獲得該運(yùn)行時服務(wù)的運(yùn)行狀況。
D. 處理運(yùn)行時事件
其中包括工作流運(yùn)行時的事件和工作流實例相關(guān)的事件。
例如:
WorkflowRuntime的Started,Stopped事件
WorkflowInstance的WorkflowStarted,WorkflowStopped事件。
3. WorkflowInstance類
WorkflowInstance:表示一個工作流實例。
他本質(zhì)上是工作流運(yùn)行時引擎所使用的實際工作流的代理。通過包含在WorkflowInstance類里的方法,宿主程序可以指示工作流運(yùn)行引擎在工作流實例上進(jìn)行操作。
我們也可以把他看成我們一個工作流類定義的外包裝。
4. 持久化點(diǎn)
我們知道,工作流其中有一個特點(diǎn)是持久性。
也就是說,比如我們有一個審批流,你不能因為服務(wù)器中間突然斷電,而讓整個審批流的狀態(tài)丟失。
所以說,我們需要一個可以持久化的介質(zhì)來持久化我們的工作流。這個持久化介質(zhì)比較常用的就是數(shù)據(jù)庫。
當(dāng)然,我們在這里并不是討論持久化介質(zhì),而是討論持久化點(diǎn)。什么是持久化點(diǎn),也就是說我們的工作流不能每進(jìn)行一步,我們就去將他持久化一次,這樣浪費(fèi)資源和效率。所以我們會在持久化點(diǎn)將當(dāng)前的工作流實例持久化。
在生命周期中,持久化點(diǎn)常常發(fā)生在以下時刻:
<1> 在工作流實例完成或終止前
<2> 在工作流實例編程空閑之后
<3> 在工作流實例被顯式地卸載后
<4> 當(dāng)具有PersistOnClose特性的活動完成后(PersistOnCloseAttribute:當(dāng)經(jīng)過裝飾的活動完成之后,必須持久化當(dāng)前工作流實例)
并且,持久化服務(wù)對于終端用戶是不可見的。
NET技術(shù):一步一步學(xué)WF系列(三),轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。