`

WF4.0 Beta1之旅(2):异常处理

阅读更多

1.WF3.5中主要使用FaultHandlerActivity来模拟TryCatch捕获异常,现在从WF4.0 beta1来看工具箱中已经没有了FaultHandlerActivity活动,顺序工作流也没有了错误处理视图,取而代之出现了Try/Catch,Catch<T>,Thorw活动,本文就介绍下这几个活动。关于WF3.5中对异常的处理方式,可以参考下文:http://www.cnblogs.com/carysun/archive/2008/10/18/WFException.html

2.我们依然使用顺序工作流模板,我们完成这样一个工作流,工作流的输入参数为UserName,输出参数为Greeting,工作流中会根据输入参数的不同而输出不同的信息,我们要处理的异常就是如果工作流没有提供输入的情况下。

3.工作流的参数如下:

UserName输入参数,Greeting输出参数,如下。

clip_image002[3]

4.给做工作增加一个变量FirstWord.注意变量是有作用域的,即他的Scope属性。

clip_image004[3]

5.下面我们看整个工作流的逻辑,工作流上面是try catch,下面是Assign,Assign将Greeting的值设置为FirstWord+“,”+UserName,如下图:

clip_image002[5]

trycatch就是我们的逻辑部分。Try中就是我们要执行的程序,catches中捕获异常并处理,

6.我们先来看下Try中逻辑,我们根据工作流的输入参数UserName来判断其长度其否为偶数,来设置变量FirstWord的值,如下:

clip_image002[7]

7.在Catches中我们来处理捕获到得异常,这个部分我们可以拖入多个Catch<T>活动,左边为异常类型,右边为相应处理的Action,拖入catch<T>会自动出现如下对话框选择异常类型。如下图:

clip_image002[9]

这个例子中我们捕获异常后的处理方式是将异常再次抛出,我们加入一个Throw活动,并设置其Exception属性。如下图:

clip_image004[5]

8.工作流的部分我们就完成了,下面是宿主程序:

class Program
{
    static voidMain(string[] args)
    {
        AutoResetEvent syncEvent = newAutoResetEvent(false);
        Console.Write("Enter your name: ");
        stringuserName = Console.ReadLine();
        stringgreeting = null;
        Dictionary<string, object> input = newDictionary<string, object>();
        input.Add("UserName", userName);
        WorkflowInstance myInstance;
if(string.IsNullOrEmpty(userName)) { myInstance = newWorkflowInstance(newSequence1()); } else {
myInstance = newWorkflowInstance(newSequence1(), input); }
myInstance.OnCompleted = delegate(WorkflowCompletedEventArgs e) { if(e.CompletionState == ActivityInstanceState.Closed) { greeting = e.Outputs["Greeting"].ToString(); } else { Console.WriteLine("Workflow CompletionState is {0}", e.CompletionState); Console.ReadLine(); } syncEvent.Set(); }; myInstance.OnUnhandledException = delegate(WorkflowUnhandledExceptionEventArgs e) { Console.WriteLine(e.UnhandledException.ToString()); returnUnhandledExceptionAction.Terminate; }; myInstance.OnAborted = delegate(WorkflowAbortedEventArgs e)
{ Console.WriteLine(e.Reason); syncEvent.Set(); }; myInstance.Run(); syncEvent.WaitOne(); Console.WriteLine(greeting); Console.ReadLine(); } }

不论工作流是否发生异常都会执行OnCompleted事件,只不过e.CompletionState不同,有异常的时候为Fault,正常为Closed。

工作流也可以使用WorkflowInstance的OnUnhandledException事件来处理在TryCatch中没有处理的异常。

9.单元测试代码如下:

[TestMethod]
public void IfElseHelloWorldTest()
{
     Dictionary<string, object> input = new Dictionary<string, object>();
     {
         { "UserName", "Cary" }
     };
     var output = WorkflowInvoker.Invoke(new CaryWFDemo.Sequence1(), input);
     Assert.AreEqual("Hello,Cary", output["Greeting"]);
}

[TestMethod]
[ExpectedException(typeof(ArgumentNullException))]
public void ShouldHandleNullUserName()
{
     WorkflowInvoker.Invoke(new CaryWFDemo.Sequence1());
}
 

相关文章:
WF4.0 Beta1之旅(1):基本介绍

分享到:
评论

相关推荐

    WF4.0 Beta1之旅(3):全新的FlowChart源码

    在这个“WF4.0 Beta1之旅(3)”中,我们将聚焦于FlowChart工作流模型的源码分析,这为我们提供了更深入理解WF4.0的工作方式和设计思想的机会。 FlowChart工作流模型是一种图形化的编程模型,它通过节点(如决策、...

    wf4.0入门系列(五)

    2. **自定义活动**: 如果预定义的活动不能满足需求,你可以创建自定义活动,扩展WF4.0的功能。 3. **配置服务**: 如果工作流需要作为WCF服务运行,你需要配置相应的服务宿主和终结点。 4. **调试与测试**: 利用VS...

    WF4.0经典实例代码

    2. **数据绑定与变量**:WF4.0支持数据绑定,使活动能够与外部数据源交互。实例可能展示了如何使用变量来存储和传递数据,以及如何在活动中使用表达式来处理数据。 3. **工作流服务**:WF4.0集成了WCF(Windows ...

    WF4.0 实战(二十一):Windows Server AppFabric中宿主WF4.0应用程序.doc

    当用户在ASP.NET客户端选择Pizza类型和数量后,数据会被发送到WF4.0服务进行处理,包括查询价格、计算总价,然后返回给客户端,用户确认后,WF4.0服务会记录订单信息。 实现WF4.0服务的关键在于定义业务流程。这里...

    WF4.0 实战(二十):Windows Server AppFabric介绍.doc

    AppFabric Caching Services,最初被称为“Velocity”,是一个分布式缓存系统,它的主要功能是加速频繁访问数据的处理速度。这一服务通过缓存客户端与缓存服务器群集进行交互,客户端可以在群集中存储和检索数据,而...

    WF4.0网络教程(含示例代码)

    WF4.0,全称Windows Workflow Foundation 4.0,是微软.NET Framework 4.0中的一个关键组件,用于构建业务流程和工作流应用程序。这个网络教程包含了丰富的资源和示例代码,旨在帮助开发者深入理解和掌握WF4.0的核心...

    WF4.0 流程设计器源码例子 (提供状态机模板)

    1. **WF4.0基础知识**:了解WF4.0的核心概念,如活动、工作流实例、触发器、变量和数据绑定。 2. **状态机工作流**:掌握状态机工作流的结构和设计原则,包括初始状态、最终状态、状态转换和事件触发。 3. **...

    ASP.net+WF4.0数据持久化请假系统Demo

    ASP.NET + WF4.0(Windows Workflow Foundation 4.0)数据持久化请假系统Demo是一个综合性的项目,展示了如何在Web应用中结合WF4.0技术处理业务流程,特别是请假申请这一具体场景。这个系统利用了ASP.NET作为前端...

    WF 4.0 and Activity Designer tidbits

    WF 4.0,全称为Windows Workflow Foundation 4.0,是微软.NET Framework 4.0中的一个核心组件,用于构建工作流驱动的应用程序。它提供了强大的工具和框架,允许开发者设计、执行和管理复杂的业务流程。Activity ...

    WF 4.0 入门经典

    1. **活动(Activity)**:这是WF 4.0的基本构建块,表示工作流中的一个操作或任务。可以是内置的简单动作,如赋值、条件判断,也可以是自定义的复杂逻辑。 2. **工作流(Workflow)**:由一系列活动组成,描述了...

    WF4.0基础篇学习笔记.docx

    WF4.0(Windows Workflow Foundation 4.0)是微软.NET Framework 4.0中引入的一个框架,用于构建和管理工作流应用。WF4.0提供了全新的架构和设计,简化了工作流的开发过程,提高了可维护性和灵活性。在本学习笔记中...

    Microsoft .NET Framework 4.0 Beta 1

    1. **CLR(Common Language Runtime)**:.NET Framework的核心组成部分,它提供了内存管理、类型安全、异常处理和安全性等服务。在4.0版本中,CLR进行了优化,提高了应用程序的启动速度和运行时性能。 2. **C# 4.0...

    Beginning+WF4.0应用到 asp.net源码实例

    wf4.0应用asp.net 这个示例将包括WF4.0的大部分知识点。包括: 1、持久化服务 2、跟踪服务 3、自定义扩展 4、WCF Workflow Service 5、WorkflowServiceHost 6、使用Interop活动去调用WF3.0工作流程

    WorkFlow流程设计源码(wf4.0)

    2. **持久化**:WF4.0支持在流程执行过程中保存和恢复状态,这意味着流程可以在任意时刻停止,并在稍后继续,这对于处理长时间运行的流程非常有用。 3. **规则引擎**:WF4.0集成了规则引擎,允许开发者在工作流中...

    [Pro.ENGINEER.Wildfire.4.0多国语言正式版].ProE_WF4.0_crack.rar

    [Pro.ENGINEER.Wildfire.4.0多国语言正式版].ProE_WF4.0_crack.rar

    WF4.0工作流例子(还不错).rar

    1. **活动(Activities)**:WF4.0的核心元素是活动,它们代表了工作流中的操作或决策。活动可以是简单的原子操作,如赋值或条件判断,也可以是复杂的组合,将多个活动打包在一起。 2. **工作流设计(Workflow ...

    wf4.0入门系列(六)

    WF4.0,全称Windows Workflow Foundation 4.0,是微软.NET Framework 4.0中引入的一个工作流框架,用于构建和执行流程化的应用程序。本篇将深入讲解WF4.0的基础知识,并以VS2012和C#为开发环境进行实战演示。 在WF...

    [WF系列] WF 4.0 经典实例 (英文版)

    [Packt Publishing] WF 4.0 经典实例 (英文版) [Packt Publishing] Microsoft Windows Workflow Foundation 4.0 Cookbook (E-Book) ☆ 出版信息:☆ [作者信息] Andrew Zhu [出版机构] Packt Publishing [出版...

    简单的WF4.0工作流设计器

    1. **WF4.0基本概念**:理解活动(Activity)、工作流(Workflow)、执行宿主(Host)等核心概念。活动是工作流的基本构建块,它们组合起来形成复杂的工作流程。 2. **WPF(Windows Presentation Foundation)**:...

Global site tag (gtag.js) - Google Analytics