代码改变世界

《WF编程》系列之30 - 基本活动:错误处理

2007-08-09 22:59  Windie Chai  阅读(2972)  评论(2编辑  收藏  举报

4.3 错误处理

Fault,故障,现在官方已经将其翻译为错误,那么以后的随笔中我也就采用官方的翻译吧.

错误处理也属于流程控制的一部分,这一节我来介绍一下有关错误处理的活动.错误是指在工作流执行期间发生的异常.我们可以使用错误处理程序来捕捉这些异常并尝试做一些”修复”工作.我们可以补偿提交的事务,或者发送Email来警告管理员并等待丢失的数据被修复.

我们最好在工作流中对可能发生的错误进行处理,如果工作流抛出了一个异常,而我们又不知道如何去处理,那么只能等Runtime终止工作流.

4.3.1 FaultHandlersActivity

FaultHandlersActivity并不是列在工具箱中等我们使用的活动.在工作流的错误处理程序视图(fault handlers view)中,默认只有一个空白的复合活动,这就是FaultHandlersActivity.而且不只是工作流, 许多复合活动(如While,Listen,Sequence和TransactionScope…)都可以通过错误处理程序视图来可以处理子活动中的错误.

在工作流或活动的右键菜单中选择查看错误(View Faults),或者点击设计器底部的第三个按钮就可以转到错误处理程序视图.我们可以在这个视图中使用FaultHandler活动.




4.3.2 FaultHandlerActivity

FaultHandler活动很好理解,因为它和C#和VB中的catch语句非常相像. FaultHandler可以捕捉异常并执行一些操作.在错误处理程序视图中,我们可以从工具箱里拖放多个FaultHandler活动到设计器图板中,每个FaultHandler都可以包含自己的子活动.我们可以添加多个FaultHandler来处理不同类型的错误(类似catch语句).

FaultHandler活动有一个FaultType属性,用来表示需要捕捉的异常类型.如果将FaultHandler设置为System.Exception,我们就可以捕捉所有的CLS-compliant异常.处理程序会捕捉所有FaultType类型的异常,或所有继承自FaultType的异常.而FaultHandler活动的另外一个属性-Fault属性则可以将异常绑定到工作流的域或者属性中. 

Runtime会从左到右依序查找FaultHandler,如果第一个FaultHandler的FaultType是System.Exception,则此FaultHandler就会捕捉所有的异常,这样做的结果就是Runtime不再需要其它的FaultHandler了(也类似catch语句).
 
相关文章:《WF编程》系列之21 - 故障 Faults