Windows WorkFlow Foundation入門(四)-工作流中的異常處理
WF中的錯(cuò)誤處理
WF中的錯(cuò)誤是以異步的方式來(lái)處理的。在活動(dòng)中顯式或隱式的拋出異常后,工作流運(yùn)行時(shí)引擎會(huì)將捕捉到的異常先保存到隊(duì)列中,在之后的時(shí)間再進(jìn)行處理。這與一般的異常處理方式不同在于,如果一個(gè)異常在try{}語(yǔ)句塊中被拋出,在相應(yīng)的catch{}語(yǔ)句塊中無(wú)法截獲該錯(cuò)誤,同時(shí)該錯(cuò)誤也不會(huì)立即拋出給用戶。
異常的起因
以下幾種情況可能會(huì)產(chǎn)生異常
? 原子事務(wù)超時(shí)
? 其它類型的事務(wù)失敗
? 宿主程序通過(guò)ThrowActivity拋出異常
? 用戶代碼錯(cuò)誤。當(dāng)工作流調(diào)用外部的用戶代碼時(shí),CLR類可能會(huì)拋出異常,如果這種異常在用戶代碼中沒(méi)有被處理,它們最終會(huì)以工作流異常的的表式出現(xiàn)。
? 其它類型的系統(tǒng)異常,例如保存失敗,.net或系統(tǒng)異常,或數(shù)據(jù)轉(zhuǎn)換錯(cuò)誤等
錯(cuò)誤捕獲
在錯(cuò)誤處理中,如果拋出異常的活動(dòng)不能處理它,異常會(huì)被轉(zhuǎn)交到它的上一級(jí)活動(dòng)處理,直到它被處理為止,否則的話,工作流實(shí)例就會(huì)被工作流運(yùn)行時(shí)引擎終止。
錯(cuò)誤處理是由FaultHandlerActivity活動(dòng)來(lái)完成的。每個(gè)FaultHandlerActivity活動(dòng)都與一個(gè).net異常類型相關(guān)聯(lián),并且它包含一系列的活動(dòng),如果錯(cuò)誤類型與某個(gè)FaultHandlerActivity關(guān)聯(lián)的錯(cuò)誤類型匹配的話,就會(huì)執(zhí)行為個(gè)FaultHandlerActivity活動(dòng)。一個(gè)FaultHandlersActivity活動(dòng)包含0-n個(gè)FaultHandlersActivity子活動(dòng),F(xiàn)aultHandlersActivity可以是任何復(fù)合活動(dòng)的子活動(dòng)。
WF中的錯(cuò)誤處理通常被視為一個(gè)反向的工作,因?yàn)樗哪繕?biāo)是當(dāng)異常發(fā)生時(shí),撤銷活動(dòng)中不成功的部分的工作。FaultHandlerActivity的執(zhí)行完成不能被認(rèn)為是事務(wù)活動(dòng)的成功完成。事務(wù)活動(dòng)會(huì)先被設(shè)置成錯(cuò)誤狀態(tài),然后是關(guān)閉狀態(tài)。任何兄弟活動(dòng)同樣會(huì)被取消。同時(shí),compensation也會(huì)成為不可用狀態(tài)。
在工作流中使用Compensation(下面譯為補(bǔ)償)
WF中對(duì)于已完成事務(wù)的補(bǔ)償模式,是對(duì)工作流中出現(xiàn)的異常進(jìn)行處理的過(guò)程,并且會(huì)在邏輯上撤銷已完成的事務(wù)。
WF補(bǔ)償有以下兩種形式:
1、當(dāng)異常沒(méi)有被處理的時(shí)候,系統(tǒng)隱式的補(bǔ)償;
2、 使用Compensate活動(dòng)進(jìn)行顯式的補(bǔ)償。
posted on 2007-01-22 11:48 西西吹雪 閱讀(1193) 評(píng)論(0) 收藏 舉報(bào)
浙公網(wǎng)安備 33010602011771號(hào)