WF从入门到精通

所需积分/C币:3 2013-01-29 16:08:33 4.45MB PDF
4
收藏 收藏
举报

WF从入门到精通(中文版),很好的一本书籍,学习WF必备
第一次使用你就可以放入许多东西,但我们现在还是从使用这个简单的 Workflow开始工作 吧 创建一个工作流 在工具箱中拖一个 Ifelse活动组件到 workf1ow设计界面上 顺序工作流 1土 reActivity1 ifElseBr anchActivi tyl fElsefiranchActirit 巴 将 Activity拖 将 Activity拖 放至此 放至此 我们现在将使川 Ifelse活动组件来问下面的问题:“我们已有的一个字符串是一个合法 的邮政编码吗?”。我们在代码屮将确实使用先前你看到的代码段屮的正则表达式来问这一问 题 但在我们进行这一步前请仔细看看 workflow的视图设计器。 workflow视图设计器提醒 我们没有提供相应的代码来做这一决定。假如你看看命名为“ ifElseBranchActivity l”的 左边分支的右上角,你将看到里面有一个惊叹号标记的小圆形图标。这是 workflow视图设计 器在告诉你 workflow并不完整。假如你试图编译带有这种提醒图标的项目时,将会编译报 错。如你把鼠标移到图标上并单击呈现出的向下箭头吋,你还能看到更多关于这错误情况 的信息。 顺序工作流 i fElseBranchActivityl 未设置属性“ Condition”a 将 Activity拖 将 Activity拖 放至此 放至此 在 Ifelse活动的分支上添加代码 1.移动鼠标到命名为“ ifelsebranchactivitv1”的左边分支上,单击以在属性面板上激 活这一分支的属性。 2.我们添加一个条件,意思是说 workflow执行到分支时将强制其执行一些动作(条件 判断为True时,将执行左边分攴)。为做到这些,单击“ condition”属性激活条件类型属 性的下拉列表。从列表中你可以选择“代码条件”类型、“(无)”类型和“声明性规则条 件”类型。这里选择“代码条件”类型。 3.上述步骤完成后,“ condition”类型属性用户界面会包含个“+”号,我们单击展 开它的子属性,该子属性也命名为“ condition”,单击以激活它。 4.“ condition”属性需要输入我们想添加的内部事件名宇。当条件需要判断时这个事件 将激发。在本例子中我们输入“ EvaluatePostal code” x iflseBranchkctivitr1 tem. nc 同!三 活动 L1 seiranchhe是 T 日条件 日 Condi tion 代码条件 Conditi ETaluatepostalc od Visual studio2008在幕后为你在 workflow源文件中添加了你在“ condition”属性中 所指明的事件。稍候我们将添加在事件激发时所要执行的正则表达式代码段。 在我们做这些工作之前,让我们继续在 workflow视图设计器上工作,我们刚刚增加了 个条件,它将引发工作流选择左边路径还是右边路径。但是两条路径中都没冇指明工作流将 进行的动作。我们在左边“ ifElseBranchActivity1”分支和右边 fElseBranchActivity2”分支屮添加活动 添加Code活动 1.拖一个“Code”活动到 workflow视图设计器上,并放到左边分支 ifElseBranchActivity l)的区域内 2.就像先前添加条件判断的代码一样,我们将为该分支添加被选中时执行的代码。单击 coductivity1”图标以在属性面板中激活它的属性。 3.在“ ExecuteCode”属性中输入 “ PostalCodevali 属性 codekctivity1 System Workflow. Ac 圈剑国 日处理程序 ExecuteCode PostalCodevalid v 日活动 Iame〕 codekctirityl Enabled Visual studio2008会自动插入该事件。稍候我们会提供对应的执行代码。右边分攴也 同样做,只是要在“ Execute Code”属性中输入“ Postalcodeinvalid” 在我们的 workflow中添加事件处理代码 1.打丌 Workflow.cs准备进行编辑 2.添加引用: using Sy stem.Text. Regularexpression; 3.定位到“ EvaluatePostal Code”方法上,插入下面的代码: private void EvaluatePostalCode(object sender, Conditional EventArgs e) string USCode =@"(\d(5)S)(\d(: S\-\d(4]S) string Canadian Code@"[ABCEGHJKLMNPRSTVXY]\D[A-z]\d[A-z]\d e Result=(Regex IsMatch( code, USCode) Regex IsMatch( code, CanadianCode)) L 变量e是“ Conditionaleventargs”类型的实例,它用来告知“ LeISe”活动应选择哪 条路径。 4.我们也需要为 workflow活动添加种能力,以便接受输入的宇符来进行验证工作 为此我们添加下面的代码,我们将声明一个名为“ Postal code”的公有属性。 private string code=string. Empty public string Postal Codc get 白由 return co set 白由 code value 有了这些,我们的 workflow应用程序就可以进行编译了,但程序并不完整,我们还要在 Workf1ow1.cs文件中定位到“ Postal codevalid”方法并插入下面的代码: Console. Write( The postal code (0) is valid. code) 同样在“ Postalcodeinvalid”方法中插入下面的代码 Console. Write( The postal code 0 is invalid*k",code) 调用工作流 1.打开 Program.cs文件。 2定位到: Work llow lnstance instance workflow Runtime. CreateWorkflow(typeof(PCodeFlow Workflow1), wfArgs 3.把上述代码替换为: Dictionary<string, object> wfArgs= new Dictionary<string, object>( wfArgs. Add("PostalCode", args. Length >0? args[o]:n) Workflow Instance instance= workflowRuntime CreateWorkflow(typeof(PCode Flow. Workflow1), wfArgs) 编译应用程序 执行你的工作流应用程序 1.打开命令提示符窗口。 2.在命令提示符下定位到编译后所生成的应用程序目录。 3.输入 pcodeflow12345查看执行结果。 4.输入 pcodeflow1234x再看看执行结果 源码下载 第二章【翻译】从入门到精通(第二章) 运行时 学习完本章后,你将掌握: 1.在你的应用程序中使用 workflow 2.理解“ Workflowrunt ime”对象的的基本功能 3.知道如何启动和停止 workf|oW运行时 4.能够使用各种 workflow运行时的相)事件 当你在赆环境中执行仟务时,需要一些东西来监管执行的过程,这个东西就是命名为 “ Workflowruntime”的对象。 WorkflowRuntime启动一个独立的工作流任务。在你的任务 执行过程中, Workllowrunlime也会针对不同的情况响应对应的事件。并且, Workllowrunit ime 还能在你的执行环境中増加一个附加的服务来保持跟踪。 WF架构纵览见下图: Host Application H AppDomaIn Workflo instance MAnaged arkmowRunti Application code Activity acti Actin crit Workflow Ermironment orkfowRuntime Threading Persistence Timer Custom Services Services AICas Services Tracking External data Transaction Servi Services WF和你的应用程序并行执行。其实,我们需要你的应用程序作为宿主。宿主应用程序可 以是 Windows forms应用程序,控制台应用程序,ASP. NET WEB应用程序,甚至可以是一个 Windows server。WF运行时和你的应用程序同在一个.NT应用程序域执行,每个应用程序域 只有一个唯一的 Workflow runt ime实例,试图在一个应用程序域中建立第二个 WorkflowRuntime的实例的话,其结果就是抛出一个“ InvalidoperationException”异常。 workflow应用程序-“ workflows”-意思指创建的逻辑上的一组活动。这些逻辑上的活 动用米完成你需要的工作流任务。当你宿主 workflow运行时的时候,其实你就在操作工作 流中的活动并让 workflow运行时执行他们。其结果就是生成一个 workflow实例, workflow 实例是一个当前正执行的 workflow任务,它能自己完成逻辑上的一组活动,回忆第一章吧, 活动能执行你提供的代码并且能对输入的数据做岀相应的决定。下一章我们将简述工作流实 例,后几章将对活动进行介绍。 在宿主应用程序中添加WF 、创建一个名称为 WorkflowHost的控制台应用程序项目 为项日添加名为 System. Workflow. Runtime的引用 宿主 workflow运行时 1.打开 PrograM.cs文件准备编辑 在“ using Sy stem.Text;”下添加以下代码: “ using System. Workflow. Runtime” 3.定位到“Main”方法,在里面添加以卜代码: WorkflowRuntime workflowRuntime=new WorkflowRuntimeo 4.编译程序桷认没有错误。在本章我们都将使用这一应用程序。 四、深入了解 Workflowrunt ime对象 我们现在已经在我们的宿主应用程序中建立了一个 Workflowruntime类型的实例,该是 简单的了解怎样和这个对象交的时候了。和大多数有用的对象一样, Workflowruntime也 暴露了一些方法和属性,我们可用他们来控制 Workflow运行时的环境。表2-1列出了所有 Workllowrunt ime属性,表2-2则列出了我们经常使用的方法。 表2-1 Workflowrunt ime的属性 属性功能 用来指明 workflow运行时是否已经启动并准备接受 workf1ow实例。当宿主调用 StArted“ Start runtime”前 StArted为 False。期间它一直维持True直到宿主调用 “ StopRuntime”为止。需注意的是当它正在运行中你不能增加核心服务 获取或设置和 Workflowruntime关联的名宇。 Workflow运行吋正在运行中你不能 Name 设置这个属性(也就是说当 StArted为True)。企图这样做的结果就是抛出一 个“ InvalidoperationException”异常。 表2-2 Workflowrunt ime的方法 方法 功能 Addservice 为 workflow运行时添加指定的服务。能添加的服务类型和时间受到种种限 制。关于服务的详细信息将在第五章介绍。 CreateWorkflow 创建一个 workflow实例,它包含一些指定(但可选)的参数。假如 workflow 运行时没有启动,该方法就调用 Start runt ime方法。 通过指明 workflow实例的标识符(由一个Guid组成)米检索 workflow实 GetWorkflow例。假如这个 workflow实例是空闪和持久化保存的,它将被重新加载并执 StartRunt ime启动 workflow运行时和相关服务,并引发“ Started”事件, Stoprunt ime停止 workflow运行时和相关服务,并引发“ Stoped”事件。 还有更多的关于 Workflowrunt ime的方法,但表2-2中列出的方法是最经常用到的方法, 也是我们将重点关注的方法。在 workflow运行期间, Workflow runtime也将在各种时间引发 许多事件,但我们将在后面的章节中介绍。 创建一个 Workflow运行时工厂 单例和工)设计模式的组合是强大的,因为工丿能保证只创建出一个曾创建的对象的单 一实例,这正好符合我们的要求(在这里使用单例模式的原因主要是从效率上考虑,其次一 个应用程序域也只能只有一个 Workflowruntime),因为 Workflowruntime完全有可能在不 同的应用当中加载和启动(例如独立的应用模块)。让我们看看怎样创建一个 WorkflowRunt ime工厂。 在项日中添加一个类型为类的新项,文件名为 WorkflowFactory.cs 在 WorkflowFactory.cs源文件屮添加如下的引用 using Systell Workflow Runt imme 三、在类中添加下面的代码: // workflow runt imo的单一实例 private static Workflow Runtime workflowRunt i me =null private static object syncRoot- new object( 四、在上述代码后添加如下方法 //工厂方法 ublic static Workflow Runt ime Get Workflow Runt ime o //多线程环境下防止并发访问 lock( svnc Root) 白由( if (null == workflowRunt ime) workflowRunt imc now WorkflowRunt imc o return workflowRunt ime 五、为类加上 Public关键字,为防止类被直接实例化,还必须为类加上 static标记, 如下所示: public static class workflowFaclory 启动 workf1ow运行时 参考表2-2,里面有一个 StartRunt ime方法,从我们的工厂对象中调用这个方法很有 意义,外部对象要求 workinωw运行时对象无需处理或担心运行时环境状态的初始化。我们 需要在我们的应用程序通过这一步来建立我们需要的 workflow环境。外部调川对象也需要 workflow运行时对象易于使用。 并不是一定要调用 Start runt ime。假如我们建立了一个 workflow实例, Start runt ime 实际上就已被调用。假如我们曾经创建了一个 workf1ow实例,或许并不用担心需要明确的 调用 SLar runt ime。但是,一旦我们添加服务时,明确地调用它就很有必要,因为可增强 代码的可维护性并确信运行时环境的状态口建宀,这样任何人就都能使用 workflow运行时对 象 因此让我们在我们的工)对象中做些轻微的更改并直接调用 Start Runtime。 1.打开 WorkflowFactory.cs文件并定位到下面的代码上: workflowRuntime= new WorkflowRunt ime o 2.在上亩的代码下添加以下的代码: workflowRuntime Starttime o 停止 workflow运行时 是否有办法启动一个 workflow运行时很有意义,如何停止一个 workflow运行时也一样。 看看表2-2吧,里面有一个 StopRuntime方法正好符合我们要求。调用 StopRuntime方法会 卸载所有正执行的 workflow和服务并关闭 workflow运行时环境。当然,正确调用 StopRuntime位置是在你申请停止逻辑结束之前或者应用程序域关闭前调用。 1.打开 WorkflowFaclory.cs文件并定位到下面的代码上 workflowRuntime= new WorkflowRunt ime o 2.在上面代码的前面增加以下代码: workflowRunt ime Starttime o 3.在 WorkflowFactory.cs屮增加 StopWorkflowRunt ime事件处理函数: static void StopWorkflowRuntimc(object scndcr, EventArgs c) 团 if workflowRuntime!-null) 白由 if( workflowRuntime IsStarted) 白由 try 白由 workflowRuntime. StopRunt ime( catch (ObjectDi sposedException 白由 以下是 WorkflowFactory.cs文件的完整源代码,在第五章之前我们不会做更多的改变: using System using System. Collections. Generic using System. Ling; using System. Text using System Workflow Runt ime namespace WorkflowHost 日由 public static class WorkflowFactory 白由 // workflow runtime的单一实例 private static WorkflowRuntime workflowRunt ime null private static object syncRoot= now objcctO /工厂方法 public static WorkflowRunt ime Get Workflow Runtime o 白由 //多线程环境下防止并发访问 lock syncRoot) 白由

...展开详情
试读 127P WF从入门到精通
立即下载 身份认证VIP会员低至7折
一个资源只可评论一次,评论内容不能少于5个字
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
上传资源赚钱or赚积分
最新推荐
WF从入门到精通 3积分/C币 立即下载
1/127
WF从入门到精通第1页
WF从入门到精通第2页
WF从入门到精通第3页
WF从入门到精通第4页
WF从入门到精通第5页
WF从入门到精通第6页
WF从入门到精通第7页
WF从入门到精通第8页
WF从入门到精通第9页
WF从入门到精通第10页
WF从入门到精通第11页
WF从入门到精通第12页
WF从入门到精通第13页
WF从入门到精通第14页
WF从入门到精通第15页
WF从入门到精通第16页
WF从入门到精通第17页
WF从入门到精通第18页
WF从入门到精通第19页
WF从入门到精通第20页

试读结束, 可继续阅读

3积分/C币 立即下载