版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1SqlPersistenervice 持久化數(shù)據(jù)庫(kù)1.1數(shù)據(jù)庫(kù)安裝1.2數(shù)據(jù)庫(kù)時(shí)間格式說(shuō)明1.3表結(jié)構(gòu)1.3.1 Instane對(duì)這個(gè)表我以前有一個(gè)錯(cuò)誤的性叫法,叫它實(shí)例表,其實(shí)應(yīng)叫未完成事例的運(yùn)行狀態(tài)表uidInstanceID sesus unlocked blocked info modified ownerID在 SqlPersistenervice 數(shù)據(jù)庫(kù)中,時(shí)間值是 GMT 格式的,這樣做的目地是使用的時(shí)間軸,如此可以解決一臺(tái)在的服務(wù)器與一臺(tái)的服務(wù)器就可以協(xié)同工作時(shí)的時(shí)差問(wèn)題GMT 比時(shí)間晚 8 小時(shí)系統(tǒng)盤(pán)Windows.NETFrameworkv3.0Windows Workf
2、low FoundationSQLEN 下SqlPersistenervice_Schema.sql SqlPersistenervice_Logic.sql1.3.2CompletedScope1.4過(guò)程2SqlWorkflowPersistenerviceSqlWorkflowPersistenervice 作為一個(gè) Persistenervice 的功能實(shí)現(xiàn)類加載到WorkflowRuntime 中為引擎提供了一種使用 SQLServer 數(shù)據(jù)實(shí)現(xiàn)持久化的功能。SqlWorkflowPersistenervice 類是使用 SQL 數(shù)據(jù)庫(kù)對(duì)工作流狀態(tài)進(jìn)行持久化的服務(wù)為了能夠使用 SqlW
3、orkflowPersistenervice,數(shù)據(jù)庫(kù)還需要啟動(dòng) DTC 服務(wù)2.1 加載說(shuō)明每當(dāng)引擎起動(dòng)時(shí)(StartRuntime),只要 Instan,并將 ownedUntil 字段設(shè)為加載的時(shí)間e 表中有實(shí)例數(shù)據(jù),就會(huì)將該實(shí)例載入引1. 引擎使用 GetWorkflow 方法,可通過(guò) SqlWorkflowPersistenervice 服務(wù)將存于數(shù)據(jù)庫(kù)uidInstanceID completedScopeID semodifiedownedUntil nextTimer中的實(shí)例加載并返回2.實(shí)例使用 load 方法,可觸發(fā)引擎的 WorkflowLoaded 事件3.沒(méi)有經(jīng)過(guò)持久化
4、的實(shí)例,調(diào)用 load 方法不會(huì)出錯(cuò),也不產(chǎn)生引擎的 WorkflowLoaded 事件4.加載的持久化實(shí)例不用 load 方法也能直接操作,但這樣不會(huì)產(chǎn)生引擎的 WorkflowLoaded事件,調(diào)用 load 方法可以產(chǎn)生引擎的 WorkflowLoaded 事件,除此之外,我沒(méi)跟出什么其他的5.引擎.GetWorkflow(GUID)方法可以返回一個(gè)引存在的實(shí)例2.2 持久化說(shuō)明1.當(dāng)引擎停止時(shí)(StopRuntime),就會(huì)將引擎內(nèi)的所有工作流實(shí)例存入 InstanownedUntil 字段為空e 表,2.實(shí)例使用 Unload 方法,通過(guò)加載到引的 SqlWorkflowPersis
5、ten實(shí)例的內(nèi)存移出與保存到數(shù)據(jù)庫(kù)的操作ervice 服務(wù),完成3.沒(méi)有加載 SqlWorkflowPersistenervice 時(shí), 實(shí)例的 TryUnload 方報(bào)異常。注:沒(méi)加載 SqlWorkflowPersistenervice 服務(wù)時(shí),引擎停止后,引擎并沒(méi)有,引的實(shí)例也存在,只是所有的執(zhí)行都被系統(tǒng)級(jí)掛起,當(dāng)重新啟動(dòng)引擎時(shí),所有的實(shí)例還可繼續(xù)運(yùn)行如果引不存在,SqlWorkflowPersistenervice 服務(wù)會(huì)到數(shù)據(jù)庫(kù)中找該實(shí)例,并將其加載到引擎如果引沒(méi)有指定 GUID 的實(shí)例,會(huì)報(bào) Workflow with id GUID not found in se persist
6、entore.如沒(méi)加載 SqlWorkflowPersistenervice 服務(wù)報(bào)的異常為 The workflow hosting environment does noversistenervice as required by an operation on the workflow instance4.如果調(diào)用 UnLoad 方法時(shí),實(shí)例在掛起狀態(tài)時(shí)(如:實(shí)例.Suspend)5.如果調(diào)用 UnLoad 方法時(shí),實(shí)例在引創(chuàng)建后,還沒(méi)開(kāi)始執(zhí)行前,2.3 idle 狀態(tài)的持久化idle 狀態(tài)即空閑狀態(tài),如 Delay 結(jié)點(diǎn)就能使實(shí)例進(jìn)入 idle 狀態(tài),并觸發(fā)引擎的WorkflowIdl
7、ed 事件。SqlWorkflowPersistenervice 會(huì)不停的刷 Instane 表,發(fā)現(xiàn)有狀態(tài)為 Delay 的實(shí)例,且 nextTimer 小于當(dāng)前時(shí)間,就執(zhí)行他。所以,持久化 Delay 狀態(tài)的實(shí)例,不用人為加載運(yùn)行,SqlWorkflowPersisten服務(wù)會(huì)自動(dòng)運(yùn)行的。ervice1. 如果調(diào)用 UnLoad 方法時(shí),實(shí)例在運(yùn)行到 Delay 結(jié)點(diǎn)的 idle 狀態(tài)2. 使用 SqlWorkflowPersistenUnload 將其持久化ervice 可以實(shí)現(xiàn)每當(dāng)實(shí)例進(jìn)入 idle 狀態(tài)后,自動(dòng)將調(diào)用可以使用 SqlWorkflowPersisten動(dòng)持久化ervic
8、e 類的構(gòu)造函數(shù)的 unloadOnIdle 參數(shù)設(shè)置是否自如調(diào)用 Unload 方法 sus 值為 0 unlocked 值為 1blocked 值為 1nextTimer 值為實(shí)際 Delay 應(yīng)蘇醒的時(shí)間。sus 值為 4 info 值為空其他同上sus 值為 2info 值為 Suspend 方法的參數(shù)unlocked 值為 1blocked 值為 0 modified 為操作的時(shí)間nextTimer 為 9999-12-31 23:59:59.9973. DelayActivity 的延時(shí)修正DelayActivity 是一個(gè)提供延時(shí)處理的組件,當(dāng)實(shí)例處于Idle 狀態(tài)時(shí),實(shí)例的Un
9、loadOnIdle被置位。等時(shí)間到達(dá)后,該實(shí)例繼續(xù)向下執(zhí)行,這里有一個(gè)問(wèn)題,就是工作流實(shí)例被不同的進(jìn)程進(jìn)行處理時(shí)的延時(shí)修正問(wèn)題SqlWorkflowPersistenervice 提供了這個(gè)功能Instane 表的 NextTime 字段就是用于修正延時(shí)時(shí)間用的。SqlWorkflowPersistenervice 的構(gòu)造函數(shù)中還有一個(gè)參數(shù) Loadingerval,此參數(shù)可以使引擎在多少時(shí)間間隔內(nèi)去檢測(cè)那些超時(shí)的工作流實(shí)例,如果超時(shí)了則自動(dòng)進(jìn)行加載并運(yùn)行。也就是引擎要過(guò)多久才去刷一次數(shù)據(jù)庫(kù),以查檢是否有到時(shí)的實(shí)例4. 重新加載工作流后,計(jì)時(shí)器不會(huì)恢復(fù)操作的錯(cuò)誤2.4 鎖定問(wèn)題工作流引擎加載
10、工作流實(shí)例時(shí),鎖定該實(shí)例,這樣其它引擎就不能加載這個(gè)工作流實(shí)例了。當(dāng)工作流實(shí)例保存回?cái)?shù)據(jù)庫(kù)后便解除鎖定狀態(tài),這樣其它引擎便可加載該工作流實(shí)例了。 當(dāng)加載工作流實(shí)例的進(jìn)程突然死掉,則數(shù)據(jù)庫(kù)的鎖定狀態(tài)是不是永遠(yuǎn)都不能了。在 SqlWorkflowPersistenervice 的構(gòu)造函數(shù)中有一個(gè)參數(shù) instanceOwnershipDuration,指明了鎖定工作流實(shí)例的時(shí)間限制??梢砸罁?jù)現(xiàn)實(shí)情況去估計(jì)一個(gè)工作流實(shí)例在某一個(gè)環(huán)節(jié)處理所用的時(shí)間進(jìn)行設(shè)置,如 10 分鐘。如果處理時(shí)間超過(guò)這個(gè)值則會(huì)被其它引擎自動(dòng),也就是說(shuō)可以由其它引擎來(lái)進(jìn)行而不依賴于當(dāng)前的進(jìn)程實(shí)現(xiàn)過(guò)程:Instan e 表里 著工作
11、流的實(shí)例,OwnedUntil 字段 了該工作流實(shí)例鎖定的到期時(shí)間,當(dāng)引擎加載一個(gè)工作流實(shí)例時(shí),它會(huì)將當(dāng)前時(shí)間加上 SqlWorkflowPersisten ervice 構(gòu)造函數(shù)中的 instanceOwnershipDuration 參數(shù)指定的時(shí)間,并把相加的時(shí)間存放到 OwnedUntil字段里。數(shù)據(jù)庫(kù)里有一個(gè) 過(guò)程 UnlockInstan e,其它的工作流引擎就是用此 過(guò)程來(lái)被鎖定的工作流實(shí)例。這個(gè)過(guò)程是引擎自動(dòng)完成的.WF 的一個(gè) BUG2.5 構(gòu)造函數(shù)說(shuō)明2.5.1第一種2.5.2第二種2.6 屬性2.7 GetAllWorkflows()方法Retrieves instance
12、 descriptions of all得到所有被持久化的實(shí)例說(shuō)明,persisted workflows.當(dāng)實(shí)例被持久化后,實(shí)例信息從引擎列表中移出,會(huì)添加到持久化列表中當(dāng)引擎啟動(dòng)后,會(huì)從持久化數(shù)據(jù)庫(kù)中加載所有被持久化的數(shù)據(jù),這時(shí)引擎列表與該列表內(nèi)EnableRetries 屬性Loadingerval 屬性Gets the length of the loadingerval.ServiceInstanceId 屬性Gets the service instance identifier.new SqlWorkflowPersistenervitring connectionString,
13、booloadOnIdle,TimeSpan instanceOwnershipDuration , TimeSpan loadingerval)參數(shù):string connectionString是持久化的數(shù)據(jù)庫(kù)參數(shù):booloadOnIdle為真表示自動(dòng)將調(diào)用 Unload 將 Delay 狀態(tài)的實(shí)例持久化參數(shù):TimeSpan instanceOwnershipDuration 引擎鎖定實(shí)例,防止其他引擎加載的時(shí)間參數(shù):TimeSpan loadingerval 是引擎自動(dòng)到數(shù)據(jù)庫(kù)中查找是否有 idle 到實(shí)例的時(shí)間步長(zhǎng)new SqlWorkflowPersistenervitring
14、connectionString)參數(shù):string connectionString是持久化的數(shù)據(jù)庫(kù)連接字串容相同3 當(dāng)實(shí)例完成后,實(shí)例信息從引擎列表中移出,也從持久化列表中移出2.8 LoadExpiredTimerWorkflowIds()方法Retrieves a list of completed timer instan.As IList(Of Guid)3實(shí)例與持久化相關(guān)的方法Load加載實(shí)例SqlWorkflowPersistenerviWPS=new SqlWorkflowPersistenervice(constring);foreach (Guid guid in SWP
15、S.LoadExpiredTimerWorkflowIds()string v = guid.ToString();SqlWorkflowPersistenerviWPS=new SqlWorkflowPersistenervice(constring); System.Collections.IEnumerable workflows = SWPS.GetAllWorkflows();foreach (SqlPersistenceWorkflowInstanceDescription instanceDescription in workflows)string v=instanceDesc
16、ription.SuspendOrTerminateDescription; Guid guid =instanceDescription.WorkflowInstanceId;bool b = instanceDescription.IsBlocked;DateTime time = instanceDescription.NextTimerExpiration.Value; WorkflowSus st = instanceDescription.Sus;/Wpleted/WorkflowSus.Created/WorkflowSus.Running/WorkflowSuspended/WorkflowSus.Terminated4引擎引持久化相關(guān)的事件WorkflowUnloadedWorkflowLoaded加載的持久化實(shí)例不用 load 方法也能直接操作,但這樣不會(huì)產(chǎn)生引擎的 WorkflowLoaded 事件,調(diào)用 load 方法可以產(chǎn)生引擎的 WorkflowLoaded 事件,除此之外,我沒(méi)跟出什么其他的TryUnload從內(nèi)存中卸載實(shí)例,返回如果實(shí)例處
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 六盤(pán)水職業(yè)技術(shù)學(xué)院《典型零件的工藝設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 金肯職業(yè)技術(shù)學(xué)院《微機(jī)原理含實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 新蘇教版一年級(jí)下冊(cè)數(shù)學(xué)第1單元第3課時(shí)《8、7加幾》作業(yè)
- 懷化學(xué)院《影視創(chuàng)作前沿技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 湖北理工學(xué)院《人力資源管理咨詢與診斷》2023-2024學(xué)年第一學(xué)期期末試卷
- 資陽(yáng)口腔職業(yè)學(xué)院《測(cè)試與傳感器技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 小學(xué)黨員聯(lián)系群眾、服務(wù)群眾制度
- 長(zhǎng)沙學(xué)院《材料加工過(guò)程多尺度模擬》2023-2024學(xué)年第一學(xué)期期末試卷
- 寒露節(jié)氣策劃講座模板
- 職業(yè)導(dǎo)論-房地產(chǎn)經(jīng)紀(jì)人《職業(yè)導(dǎo)論》名師預(yù)測(cè)卷3
- 礦工睡崗檢查書(shū)
- 仁恒江灣城修建幕墻工程監(jiān)理實(shí)施細(xì)則
- 廣東省佛山南海區(qū)四校聯(lián)考2023屆中考試題猜想數(shù)學(xué)試卷含解析
- 2023年江蘇蘇州工業(yè)園區(qū)管委會(huì)招聘筆試參考題庫(kù)附帶答案詳解
- GB/T 10752-2005船用鋼管對(duì)焊接頭
- 酒店婚宴銷售年度工作計(jì)劃4篇
- 健康教育工作考核記錄表
- 裝飾工程施工技術(shù)ppt課件(完整版)
- SJG 05-2020 基坑支護(hù)技術(shù)標(biāo)準(zhǔn)-高清現(xiàn)行
- 汽車維修價(jià)格表
-
評(píng)論
0/150
提交評(píng)論