《微软工作流基础知识》由会员分享,可在线阅读,更多相关《微软工作流基础知识(547页珍藏版)》请在金锄头文库上搜索。
1、WorkFlow从入门到精通目录第一章 WF 简介 .1第二章 workflow 运行时 .8第三章 workflow 实例 .22第四章 活动及 workflow 类型介绍 .38第五章 workflow 跟踪 .51第六章 加载和卸载实例 .82第七章 基本活动的操作 .105第八章 调用外部方法及工作流 .132第九章 逻辑流活动 .177第十章 事件活动 .213第十一章 并行活动 .260第十二章 策略和规则 .295第十三章 打造自定义活动 .338第十四章 基于状态的工作流 .388第十五章 工作流和事务 .413第十六章 明式工作流 .450第十七章 关联及本地主机通信 .47
2、6第 1 页 共 547 页第一章 WF 简介学习完本章,你将掌握:1.了解工作流的概念和理论2.把 WF 和 BizTalk 与 WCF 做比较3.开始使用 WF 进行编程4.知道怎样使用 Visual Studio 工作流支持 以下是一小段进行邮政编码验证的代码 http:/ ZIP 编码或者加拿大邮政编码则返回 True,否则返回 False”。这是一段很实用的代码,事实上假如你不想在 ASP.NET 中使用其它验证控件的话,你就可在你的 ASP.NET 中使用这段验证逻辑。我们现在就创建一个 Workflow 应用程序,它将进行同样的验证,并且返回验证是否通过的信息。 创建一个基于控制
3、台的 Workflow 项目1.启动 Visual Studio 2008第 2 页 共 547 页2.创建顺序工作流控制台应用程序项目3.项目名称中输入 PCodeFlow4.点击确定,将自动生成下面的初始界面在编辑代码或插入 Workflow 项前,停留片刻看看 Workflow 项目为你生成的两个文件:Program.cs:从许多方面可以看出 ,这是一个典型的控制台应用程序源第 3 页 共 547 页文件。然而,这个模板增加了大量代码来支持 Workflow 的操作。理解这些代码是本书的一个主要目标,但本章只是简单了解一下它做了些什么。Workflow1.cs:这是一个 Workflow
4、 组件,我们将对其进行修改以进行邮政编码的验证,第一次使用你就可以放入许多东西,但我们现在还是从使用这个简单的 Workflow 开始工作吧。创建一个工作流在工具箱中拖一个 IfElse 活动组件到 workflow 设计界面上。我们现在将使用 IfElse 活动组件来问下面的问题:“我们已有的一个字符串是一个合法的邮政编码吗?” 。我们在代码中将确实使用先前你看到的代码段中的正则表达式来问这一问题。但在我们进行这一步前请仔细看看 workflow 的视图设计器。workflow视图设计器提醒我们没有提供相应的代码来做这一决定。假如你看看命名为“ifElseBranchActivity1”的左
5、边分支的右上角,你将看到里面有一个惊叹号标第 4 页 共 547 页记的小圆形图标。这是 workflow 视图设计器在告诉你 workflow 并不完整。假如你试图编译带有这种提醒图标的项目时,将会编译报错。如你把鼠标移到图标上并单击呈现出的向下箭头时,你还能看到更多关于这一错误情况的信息。在 IfElse 活动的分支上添加代码1.移动鼠标到命名为“ifElseBranchActivity1 ”的左边分支上,单击以在属性面板上激活这一分支的属性。2.我们添加一个条件,意思是说 workflow 执行到分支时将强制其执行一些动作(条件判断为 True 时,将执行左边分支) 。为做到这些,单击“
6、condition”属性激活条件类型属性的下拉列表。从列表中你可以选择“代码条件”类型、 “(无) ”类型和“声明性规则条件”类型。这里选择“代码条件”类型。3.上述步骤完成后, “condition”类型属性用户界面会包含一个“+”号,第 5 页 共 547 页我们单击展开它的子属性,该子属性也命名为“condition” ,单击以激活它。4.“condition”属性需要输入我们想添加的内部事件名字。当条件需要判断时这个事件将激发。在本例子中我们输入“EvaluatePostalCode” 。Visual studio 2008 在幕后为你在 workflow 源文件中添加了你在“cond
7、ition”属性中所指明的事件。稍候我们将添加在事件激发时所要执行的正则表达式代码段。在我们做这些工作之前,让我们继续在 workflow 视图设计器上工作,我们刚刚增加了一个条件,它将引发工作流选择左边路径还是右边路径。但是两条路径中都没有指明工作流将进行的动作。我们在左边“ifElseBranchActivity1”分支和右边“ifElseBranchActivity2”分支中添加活动。添加 Code 活动1.拖一个“Code”活动到 workflow 视图设计器上,并放到左边分支(ifElseBranchActivity1)的区域内。2.就像先前添加条件判断的代码一样,我们将为该分支添加
8、被选中时第 6 页 共 547 页执行的代码。单击“codeActivity1 ”图标以在属性面板中激活它的属性。3.在“ExecuteCode” 属性中输入“PostalCodeValid ”。Visual Studio 2008 会自动插入该事件。稍候我们会提供对应的执行代码。右边分支也同样做,只是要在“ExecuteCode ”属性中输入 “PostalCodeInValid”。在我们的 workflow 中添加事件处理代码1.打开 Workflow.cs 准备进行编辑2.添加引用:using System.Text.RegularExpression;3.定位到“EvaluatePos
9、talCode ”方法上,插入下面的代码:private void EvaluatePostalCode(object sender, ConditionalEventArgs e)string USCode = (d5$)|(d5$-d4$);string CanadianCode = ABCEGHJKLMNPRSTVXYDA-ZdA-Zd; e.Result = (Regex.IsMatch(_code, USCode) | Regex.IsMatch(_code, CanadianCode);第 7 页 共 547 页变量 e 是 “ConditionalEventArgs”类型的实例,
10、它用来告知“IfElse”活动应选择哪条路径。4.我们也需要为 workflow 活动添加一种能力,以便接受输入的字符串来进行验证工作。为此我们添加下面的代码,我们将声明一个名为“PostalCode”的公有属性。private string _code=string.Empty;public string PostalCodegetreturn _code;set_code = value;有了这些,我们的 workflow 应用程序就可以进行编译了,但程序并不完整,我们还要在 Workflow1.cs 文件中定位到“PostalCodeValid”方法并插入下面的代码:Console.Wr
11、ite(The postal code 0 is valid., _code);第 8 页 共 547 页同样在“PostalCodeInValid”方法中插入下面的代码:Console.Write(The postal code 0 is *invalid*., _code);调用工作流1.打开 Program.cs 文件。2.定位到:WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(PCodeFlow.Workflow1),wfArgs);3.把上述代码替换为:DictionarywfArgs=newDictionary();wfArgs.Add(PostalCode,args.Length0?args0:); WorkflowInstanceinstance=workflowRuntime.CreateWorkflow(typeof(PCod