代码改变世界

《WF编程》系列之21 - 故障 Faults

  Windie Chai  阅读(2955)  评论(2编辑  收藏  举报

3.3 故障 Faults

和所有软件一样,工作流未必总是能够完美的执行.例如,数据库服务器的故障就可能使工作流抛出异常.此外,我们还可以通过TrowActivity来人为的抛出一个异常.

在工作流内部管理异常和管理C#中的异常类似.复合活动包含一个故障处理程序(fault handlers)来捕捉异常. 在.NET中,异常一直向上传递直到.NET Runtime为其找到合适的异常处理程序.在工作流内部也是一样,如果活动没有处理发生的异常,Runtime会把这个异常传递给它的父活动.如果Runtime无法找到故障处理程序,Runtime会终止工作流并触发WorkflowTerminated事件.

FaultHandlerActivity在Windows Workflow中用来处理异常.我们可以通过右键单击活动并选择View Faults来查看复合活动的故障处理程序.顺序工作流的设计器底部有三个小图标,其中第三个小图标便是View Faultss的快捷方式.下面是工作流的故障视图:



在故障视图中,我们可以拖放一些FaultHandlerActivity.我们可以将每一个FaultHandlerActivity都和一个.NET异常类型(如System.NullReferenceException或System.ArgumentException)做关联.就像C#中的catch字句,故障处理程序将处理任何给定类型或从给定类型衍生出来的异常.在下面的截图中,我们添加一个故障处理程序并将其FaultType设置为System.Exception.每一个异常的最终父类都是System.Exception,这个故障处理程序将处理工作流中任何可能的异常.



每个故障处理程序都有一个子活动列表,当它捕捉到异常时就去执行这个列表中的活动.就像各种编程语言中的异常处理程序一样,故障处理程序的目的是清空或者逆转还没有完成的工作.如果SequentialWorkflowActivity的故障处理程序处理了异常,工作流Runtime便会触发WorkflowCompleted事件,反之则触发WorkflowTerminated事件.如果我们想要终止工作流,我们可以在故障处理程序中使用ThrowActivity.

在下面的截图中,我们对故障处理程序的配置如下:

l 故障处理程序指定FaultType为System.Exception. 这个活动将传入的异常绑定到一个叫做_fault的域.

l 第一个子活动是一个CodeActivity,会在控制台中输出异常的信息.

l 第二个子活动是ThrowActivity,将其Fault属性绑定到_fault域,它会再次抛出这个异常.

 

编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示