有關
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伺服器上應用提供的函式 方法,由於不在乙個記憶體空間,...