一、FaultHandler

  添加一个工作流图如下:

  

  首先添加一个Seruence,在里面添加3个Code,外面添加一个Code,打开Seruence错误处理,在容器里添加一个faultHandler,在faultHandler里添加一个Code活动。

  

  

  设置faultHandler的FaultType属性如下

  

  

  

  注意要绑定属性。

  运行效果:

  

  注意到,如果FaultHandler捕捉了错误,那么Seruence内的其他Code活动都不会再执行,但是Seruence外部的Code会继续执行。

二、Throw

  在WWF工作流中也可以通过Throw活动来抛出一个特定信息的异常。与C#的throw类似。用户可以通过Throw活动在工作流中声明一个显性的异常并将它抛出,当异常发生时将会触发工作流运行时容器Runtime的"WorkflowTerminated"事件。

  新建一个工作流如下:

  

  设置Throw活动的FaultType属性如下:

  

  代码如下:

    public sealed partial class Workflow1 : SequentialWorkflowActivity
{
public Workflow1()
{
InitializeComponent();
} private void Code1(object sender, EventArgs e)
{
Console.WriteLine("Code1执行...");
Console.ReadKey();
} private void Code2(object sender, EventArgs e)
{
Console.WriteLine("捕捉到\"尝试除以0\"异常");
}
}

  输出如下:

  

  如果Sequence容器不捕捉异常,则容易后面的CodeActicity1活动将不被执行。

三、Compensate

  在现实工作中,工作流还需要对某些特殊情况下的业务逻辑进行处理,例如,邮件发错了并不是登录客户的邮箱把它删除,而是再发一封告诉用户你发错了。

  在WWF中,可以使用CompensatableSequence活动和Compensatable活动来实现。

  像FaultHandler活动一样,补偿也需要指定一个区域,在该区域内如果发生了某些异常情况,那么就可以通过Compensatable来指定该类型的异常应该执行哪个区域内的补偿措施,这个区域可以使用CompensatableSequence活动来限定。CompensatableSequence活动是一个顺序类型的容易,与Sequence活动类似。

  范例:模式用户向购买一件商品,有快递发送,在运输过程中可能出现天气原因导致送货延迟,那么将启动补偿的流程来通知买家。

  首先定义一个异常,然后新建一个流程如下:

  一个Code,一个CompensatableSequence(切换至"查看补偿程序"里面放一个Code,默认视图什么活动都没),一个ifElse(左边一个Code,右边一个Throw(FaultType异常定义为刚刚定义的异常),却换至"查看错误处理"里FaultHandler然后里面一个Compensate)。

  

  

  切换视图后,工作流显示如下:

  

  Throw不需要捕捉设置faultType。

  代码如下:

    public sealed partial class Workflow1 : SequentialWorkflowActivity
{
string str = "吹台风";
MyException exec; public Workflow1()
{
InitializeComponent();
} private void ReceiveOrderCode(object sender, EventArgs e)
{
exec = new MyException(str);
Console.WriteLine("你的订单已收到...");
} private void SendOnTimeCode(object sender, EventArgs e)
{
Console.WriteLine("商品准时送达...");
} private void Condition(object sender, ConditionalEventArgs e)
{
e.Result = str == "天气良好";
} private void Code1(object sender, EventArgs e)
{
Console.WriteLine("继续...");
Console.ReadKey();
} private void Code2(object sender, EventArgs e)
{
Console.WriteLine("由于天气原因,货品将延迟送达...");
Console.ReadKey();
} } [SerializableAttribute()]
public class MyException : Exception
{
public MyException(string message)
: base(message)
{ }
}

  当天气不同时,输出效果如下:

  

  输出:

  

WWF3事务和异常处理类型活动<第四篇>的更多相关文章

  1. WWF3事件类型活动<第三篇>

    WWF将工作流分为两大类: 面向Human:在工作流运行时通过用户对外部应用程序的操作来影响工作流的业务流转. 面向System:应用程序控制流程. 工作流与应用程序都是可以单独存在的,因此它们之间的 ...

  2. 深入理解DOM事件类型系列第四篇——剪贴板事件

    × 目录 [1]定义 [2]对象方法 [3]应用 前面的话 剪贴板操作可能看起来不起眼,但是却十分有用,可以增强用户体验,方便用户操作.本文将详细介绍剪贴板事件 定义 剪贴板操作包括剪切(cut).复 ...

  3. 第四篇 Replication:事务复制-订阅服务器

    本篇文章是SQL Server Replication系列的第四篇,详细内容请参考原文. 订阅服务器就是复制发布项目的所有变更将传送到的服务器.每一个发布需要至少一个订阅,但是一个发布可以有多个订阅. ...

  4. Asp.Net事务和异常处理:

    Asp.Net事务和异常处理: 一.什么是事务处理? 事务处理是一组组和成逻辑工作单元的数据库操作,虽然系统中可能会出错,但事务将控制和维护每个数据库的一致性和完整性. 如果在事务过程中没有遇到错误, ...

  5. 【译】第四篇 Replication:事务复制-订阅服务器

    本篇文章是SQL Server Replication系列的第四篇,详细内容请参考原文. 订阅服务器就是复制发布项目的所有变更将传送到的服务器.每一个发布需要至少一个订阅,但是一个发布可以有多个订阅. ...

  6. WWF3自定义活动<第八篇>

    WWF提供了对原有活动进行扩展以及自定义新活动的功能,用户可以通过"Workflow Activity Library"创建和开发自定义活动. 一.自定义活动类型 默认情况下,创建 ...

  7. 数据库程序接口——JDBC——功能第四篇——事务之Spring事务

    综述 事务的实现方式有三种,JTA,Spring事务,Web Container方式.本篇讲述Spring事务. Spring事务分为两个部分核心对象,Spring事务的实现方式. Spring事务实 ...

  8. 解剖SQLSERVER 第四篇 OrcaMDF里对dates类型数据的解析(译)

    解剖SQLSERVER 第四篇  OrcaMDF里对dates类型数据的解析(译) http://improve.dk/parsing-dates-in-orcamdf/ 在SQLSERVER里面有几 ...

  9. 初学安卓开发随笔之 Menu、toast 用法、活动的四种启动模式 以及 一个方便的Base活动类使用方法

    Toast toast 是安卓系统的一种非常棒的提醒方式 首先定义一个弹出Toast的触发点,比如可以是按钮之类 其中 Toast.LENGTH_SHORT是指显示时长 还有一个内置变量为Toast. ...

随机推荐

  1. 准备学一学go-lang啦 ~~ 学习Go应该用什么姿势? !

    go毕竟是新语言,没有那么多历史包袱,并且是google出品,c语言创始人为语言设计组成员,应该还是不错的. go天生具有并行能力,这个在现代服务器端编程领域作用很显而易见,高效服务,快速编码,适合互 ...

  2. BIP_开发案例04_通过BI Publisher实现打印报表的二维码(案例)(待整理)

    2014-01-01 Created BaoXinjian

  3. UVA 11137 Ingenuous Cubrency(dp)

    Ingenuous Cubrency 又是dp问题,我又想了2 30分钟,一点思路也没有,最后又是看的题解,哎,为什么我做dp的题这么烂啊! [题目链接]Ingenuous Cubrency [题目类 ...

  4. HTML5与HTML4的区别

    一.推出的理由及目标 web浏览器之间的兼容性很低 文档结构不够明确 web应用程序的功能受到了限制 二.语法的改变 内容类型 文件扩展名html htm  内容类型 texthtml   二者不变 ...

  5. [转载]socket下server端支持多客户端并发访问简单实现

    /*Author: wainiwann *Source: 博客园 http://www.cnblogs.com/wainiwann *Remarks:  转载请说明出处!!! */ 感觉很不错,可以学 ...

  6. UCOS-互斥信号量(学习笔记)

    互斥信号量主要是为了解决信号量出现的优先级反转的情况:任务的运行取决于优先级和获得信号量2个条件,并且获得信号量又优先于设定的优先级.剥夺性内核对信号量进行独占访问,就有可能出现先获得信号量的低优先级 ...

  7. 全文检索引擎Solr系列——solr入门

    下载4.8.0版本,下载地址:http://archive.apache.org/dist/lucene/solr/4.8.0/ 解压后,得到文件夹视图如下: 解压缩solr,在example目录有s ...

  8. English Notes

    1. Thanks for stopping by.慢走不送. 2. I don't like to judge a book by it's cover.我不喜欢以貌取人. 3. Rush hour ...

  9. [Flex] PopUpButton系列 —— 添加按钮图标

    <?xml version="1.0" encoding="utf-8"?><!--为主按钮添加默认图标 PopUpButtonIcon.mx ...

  10. 老师你好。使用cordova生成的hellowold 的安卓5.0版本太高。怎么才可以生成4.4的呢?

    你好 在你的应用目录,有个config.xml文件,课程没有介绍每个配置项.你可以增加一项 preference name="android-targetSdkVersion" v ...