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输出参数,如下。
4.给做工作增加一个变量FirstWord.注意变量是有作用域的,即他的Scope属性。
5.下面我们看整个工作流的逻辑,工作流上面是try catch,下面是Assign,Assign将Greeting的值设置为FirstWord+“,”+UserName,如下图:
trycatch就是我们的逻辑部分。Try中就是我们要执行的程序,catches中捕获异常并处理,
6.我们先来看下Try中逻辑,我们根据工作流的输入参数UserName来判断其长度其否为偶数,来设置变量FirstWord的值,如下:
7.在Catches中我们来处理捕获到得异常,这个部分我们可以拖入多个Catch<T>活动,左边为异常类型,右边为相应处理的Action,拖入catch<T>会自动出现如下对话框选择异常类型。如下图:
这个例子中我们捕获异常后的处理方式是将异常再次抛出,我们加入一个Throw活动,并设置其Exception属性。如下图:
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中没有处理的异常。
[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()); }
发表评论
-
平淡的2007
2007-12-24 08:04 785早上起来,送女朋友去公交车站,然后回来赶紧打开电脑,先 ... -
DreamSpark发布,高校学生免费使用Visual Studio 2008 Professional Edition 等微软软件
2008-02-20 13:23 1383今天上网无意中搜索到学生可以免费使用VS2008专业版,后来又 ... -
坚持学习WF(1):从HelloWorld开始
2008-04-04 16:30 850[置顶]坚持学习WF文章索 ... -
坚持学习WF(2):WF创作模式和设计时工具
2008-04-05 17:19 600[置顶]坚持学习WF文章索 ... -
坚持学习WF(3):WF框架概览
2008-04-08 07:27 738[置顶]坚持学习WF文章索 ... -
坚持学习WF(4):活动(Activity)和依赖属性(DependencyProperty)
2008-04-12 00:01 1103[置顶]坚持学习WF文章索引 活动(Activity) 活动 ... -
坚持学习WF(5):自定义活动(CustomActivity)
2008-04-13 15:25 882当WF提供的标准活动不能满足我们的需求的时候,我们就需要定义自 ... -
MOSS点滴(1):如何开发和部署feature
2008-04-16 21:35 807Features 是MOSS 2007以开箱即用的一套新功能, ... -
MOSS点滴(2):自定义Application Page
2008-04-19 20:07 810在MOSS中后台管理的页面都是Application Pag ... -
坚持学习WF(6):开发可复用的宿主程序
2008-04-21 21:45 662我们之前写工作流宿主 ... -
MOSS点滴(3):说说MOSS中的母版页
2008-04-25 21:15 1139MOSS中有两种页面:Site P ... -
MOSS点滴(4):实现Form认证
2008-04-29 21:12 669本文主要参考了网上的一些文章,但有些文章有些地方说的不是很明确 ... -
坚持学习WF(7):流程控制(Flow Control)
2008-04-30 18:10 775本文主要说说WF中和流 ... -
坚持学习WF(8):本地服务之调用外部方法
2008-05-09 08:17 719WF提供了一组核心服务 ... -
MOSS中的WebPart开发
2008-05-10 13:53 1025由于在asp.net1.1的时候asp.net中还没有webp ... -
坚持学习WF(9):本地服务之事件处理
2008-05-28 07:49 764[置顶]坚持学习WF文章索引 一:先来介绍两个活动 Even ... -
坚持学习WF(10):在工作流中使用关联
2008-06-01 13:03 660[置顶]坚持学习WF文章索 ... -
坚持学习WF(11):工作流通信与队列
2008-06-07 15:45 694[置顶]坚持学习WF文章索引 WF 提供的通信模型是构建于 ... -
MOSS中创建自定义内容类型
2008-06-12 20:23 1071一:简要介绍 某类内容 ... -
.NET中IDisposable接口的基本使用
2008-06-15 12:01 910首先来看MSDN中关于这个接口的说明: [ComVisible ...
相关推荐
WF4.0 Beta1之旅(3):全新的FlowChart源码
WF4.0 实战(二十):Windows Server AppFabric介绍
WF4.0 实战(二十一):Windows Server AppFabric中宿主WF4.0应用程序
WF4.0经典实例代码,WF4.0经典实例代码WF4.0经典实例代码
wf4.0应用asp.net 这个示例将包括WF4.0的大部分知识点。包括: 1、持久化服务 2、跟踪服务 3、自定义扩展 4、WCF Workflow Service 5、WorkflowServiceHost 6、使用Interop活动去调用WF3.0工作流程
[Packt Publishing] WF 4.0 经典实例 (英文版) [Packt Publishing] Microsoft Windows Workflow Foundation 4.0 Cookbook (E-Book) ☆ 出版信息:☆ [作者信息] Andrew Zhu [出版机构] Packt Publishing [出版...
WF 4.0 and Activity Designer tidbits,Custom CanvasActivity
该资源需要安装sql server 2008,运用WF4.0的新特性实现了一个简单的请假系统,并实现了WF4.0的数据持久化
WF4.0利用书签实现动态调用子流程的例子
WF4.0基础篇学习笔记,很好的资料文档,下载不后悔
从网络上收集的微软WF4.0的相关资料,及例子代码,方便大家学习,参考,并向原创作者们致敬
[Apress] WF 4.0 入门经典 (英文版) [Apress] Beginning WF Windows Workflow in .NET 4.0 (E-Book) ☆ 出版信息:☆ [作者信息] Mark Collins [出版机构] Apress [出版日期] 2010年03月19日 [图书页数] 500页...
VS2012 c#
非常好的WF 4的入门书,介绍了从简单建立WF,到使用其高级功能,入扩展、跟踪等
如果WF不能持久化,那么流程就需要一次就执行完毕,所有的操作就要一次走下去,如果不能持久化,那么在流程中需要处理的公共数据,可能为简单类型,也可能为复杂类型)则完全不同,甚至说每个人都是不一样的,我们要...
WF4.0 流程设计器源码例子 (提供状态机模板)
基础版的流程学习教程 适合初学者 流程相关的东西 从WinFX到NET3.x再到NET4.0 ,WPF,WCF,WF 始终是放在...原文网址:file:///F:/接收文件/培训相关/WF4.0/WF4.0/基础篇/WF4_0 基础篇 (一)开始使用WF_雨枫技术教程网.mht
WF4.0工作流设计器,C/S结构,可实现无代码设计工作流
最权威的Beginning WF 4.0翻译,详细的讲解,一步一步教你掌握工作流,绝对分有所值。
The Workflow Foundation included in .Net 4.0 (referred to as WF 4.0) represents a whole new paradigm for building workflow-based applications. It has been completely reengineered from the ground up. ...