码迷,mamicode.com
首页 > 其他好文 > 详细

WWF事务和异常处理类型活动<第四篇>

时间:2014-09-04 18:22:59      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   使用   ar   2014   art   div   

一、FaultHandler

  添加一个工作流图如下:

  bubuko.com,布布扣

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

  bubuko.com,布布扣

  bubuko.com,布布扣

  设置faultHandler的FaultType属性如下

  bubuko.com,布布扣

  bubuko.com,布布扣

  bubuko.com,布布扣

  注意要绑定属性。

  运行效果:

  bubuko.com,布布扣

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

二、Throw

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

  新建一个工作流如下:

  bubuko.com,布布扣

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

  bubuko.com,布布扣

  代码如下:

    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\"异常");
        }
    }

  输出如下:

  bubuko.com,布布扣

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

三、Compensate

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

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

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

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

WWF事务和异常处理类型活动<第四篇>

标签:style   blog   http   color   使用   ar   2014   art   div   

原文地址:http://www.cnblogs.com/kissdodog/p/3956387.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!