WF的一些技術細節與應用體會(三)

2021-09-09 03:53:22 字數 1304 閱讀 5694

有關

handleexternalevent

的一些事情。有乙個很有趣的現象,是望星觀月發現的。情況大體是這樣的,當乙個工作流設計中含有乙個

handleexternalevent

活動時,在其執行到該活動後,如果沒有觸發乙個相關的事件,則該活動會被持久化的。這裡使用的持久化是

sqlworkflowpersistenceservice

作為持久化服務,並且在建構函式中將

instanceownershipduration

和loadinginterval

兩個引數指定了不為零的值。 但在持久化後,在資料庫中的

instancestate

表中的ownerid

和owneduntil

為空值,且

nexttimer

為永久。

如果我想讓

handleexternalevent

的後續活動能夠讓同一人進行操作,則可能出現問題!這意味著什麼?例項沒有被鎖定,其它的引擎都可以進行載入!這就有可能產生爭用問題。此時應在

instanceownershipduration

引數所指定的時間之內,按道理引擎在持久化工作流時進行鎖定。這

是微軟的疏解還是故意這麼設計的?

工作流中的

handleexternalevent

活動是用來接收宿主發出的事件用的。如果執行到此處進行時間限制的持久化,此時

handleexternalevent

只能接收同乙個引擎來的事件通知,那麼

handleexternalevent

就失去活動了意義。試想一下,我們可以用其它的活動來代替

handleexternalevent

來達到同樣的效果。

handleexternalevent

代表的意思是,使用者什麼時候觸發是隨機的,不能侷限於某一時間內的某一特定的人。也就是說當執行到

handleexternalevent

時前面的活動已經完結,這個完結不是乙個一般意義上的某乙個活動的完結,他也代表了工作流外某一人或系統某一參與階段的完結!。說的再白一點就是,我提前完成了任務,於是持久化解鎖以讓後面的人或系統及時參與。從這個層次上來講,微軟的做法是對的(當然對了,這麼關鍵的東西微軟肯定不會搞錯!只是我理解的不到位而已)。

看來這只是虛驚一場,但同時也說明了乙個問題,我們在應用工作流時,要充分每乙個工作流活動的意義,不能只是為了走通工作流而做工作流。

那麼如何保證

handleexternalevent

的後續活動能夠讓同一人進行操作?你有答案了嗎?留乙個懸念吧,呵呵。

WWF的一些技術細節與應用體會(一)

基本wwf 的研究已經有一段時間了,在 windows sdk documentation 中的有關 wwf的資料也看了個差不多。現在理論上的東西基本上沒有什麼問題,那麼問題就在於如何去應用了。從網上查了一下,這方面的案例很少,也許非 wwf的其它工作流引擎的應用可能會多一些,但我沒有去查。為此我自...

WWF的一些技術細節與應用體會(一)

基本wwf 的研究已經有一段時間了,在 windows sdk documentation 中的有關 wwf的資料也看了個差不多。現在理論上的東西基本上沒有什麼問題,那麼問題就在於如何去應用了。從網上查了一下,這方面的案例很少,也許非 wwf的其它工作流引擎的應用可能會多一些,但我沒有去查。為此我自...

RPC封裝需要注意的一些技術細節

rpc remote procedure call,即遠端過程呼叫 是建立在socket之上的,在一台機器上執行的主程式,可以呼叫另一台機器上準備好的子程式,就像lpc 本地過程呼叫 也就是說兩台伺服器a,b,乙個應用部署在a伺服器上,想要呼叫b伺服器上應用提供的函式 方法,由於不在乙個記憶體空間,...