




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、windows工作流活动技术概览发表日期:2008-3-23 i人部分金业应用程序都包含开发人员和架构师认为町以通过工作流轻松自然表示的业 务流程。从根木上讲,工作流是捕捉现实世界屮实体间的交互的程序。工作流等待来自外部 世界的促进因索,而促进因索却可能需要相当长的时间才能到来。作为即将推出的microsoft .net framework 3.0的重要组成部分,windows workflow foundation提供了编程模型和运行时引擎,以便基于安装了 .net framework 2.0或更高版 本的window平台来构建支持工作流的应用程序,其最低运彳了要求为windows xp s
2、ervice pack 2 (sp2)或 windows server 2003 从软件的角度看,需要人为操作的多数是界步事件处理、状态保持以及共享服务器可用 性。windows workflow foundation实际上支持任何涉及人为操作的情况。每一个工作流都是一个声明程序,其中,每条程序语句都用称为活动的组件表示。关于 windows workflow foundation的最大误区z在于将所有要素活动都看成是顺序相连或按 状态机转换和连。实际上,windows workflow foundation对执彳亍模型进行了活动自动控制 方面的虚拟化。这使您能编写对以捕捉各种控制流模式的复合
3、活动,范围包括多种连接和合 并、状态机、图形、序列、交叉存取和非木地退出等。总之,它将使您能够通过“高保真” 的复合活动对存在于现实世界屮的控制流模式进行建模。然而,windows workflow foundation提供了针对以下两种模式的内置活动:顺序工作流和状态机工作流。顺序工作流有明确的开始和结束点,从始至终,一步接一步,沿看一条可能的线路执行。 状态机工作流可以被表示为一纟r状态,每种状态可能包括各种活动,并由事件触发。您可以 定义初始和完成状态,并按照所冇定义的转换过程逐个状态地执行,直至到达结束状态。正如我所谈到的,工作流的构造块就是活动。构造这样一个工作流意味着将活动进行组
4、合以创建所需的模型來解决碰到的问题。虽然windows workflow foundation捉供了很多内 置的活动,但依然可以通过自定义活动对其进行完全扩展。了解“开箱即用”活动的目标和 功能对于充分理解该平台的真实潜能十分要害。木期专栏将带您浏览安装windows workflow foundation runtime 和 visual studio 2005 designer 时涉及的标准t作流活动。“开箱即用”活动windows workflow foundation 是.net framework 3.0 (原先称为 winfx?)的组成部 分。虽然它只是个测试版本,但我发现最新的c
5、ommunity technology preview (社区技 术预览,ctp)版非常稳定,许多公司正广泛使用该版本开发应用程序。因此,已经出现大 量工具和自定义活动,一个基于新闻组和论坛(如)的有效的技术支持社区正口益发展壮大。假如您对工作流应用程序感爱好,那么越早熟悉它越好。若要查找最新的卜载,请访问windows workflow foundation<>安装完毕后,启动visual studio 2005,打开一个visual basic?或c#工作流项目,査看工具箱中的内容。根据您所 选择的项目类型,工具箱可能如图1屮所示的一种。工具箱中的内容与您的选择操作相关,根据您
6、所选择的工作流的类型会有不同。非凡是, 图1左边的工具箱还包含您创建状态机工作流时所需的状态活动。右边的工作箱窗口只包 含顺序工作流的活动。这纽预定义的活动可根据目标和预期的行为分为儿类。图2显示了 可能的分类:控制流、执行、事件、web服务和状态机。图1工具箱里的工作流活动(click the image for a smaller view)图2控制流活动治理图形活动执行的顺序。列表列出了实现循环的条件块以及构造。执行活 动包括多种构造,这些构造可终止或挂起工作流、引发异常、执行内部或外部代码,或者主 成另一个工作流。多数工作流需要与主机环境同步一通常是windows forms应用程序或
7、 asp.nct应用程序。事件组中的活动能使工作流停止以等待外部事件、处理接收的事件,或 只是在执行下一步z前进行等待。最后,web服务和状态组将目标锁定在工作流的两种非 凡功能一将内部引擎为公开为web服务或公开为状态机。让我们检查一下框架中的主要 活动,然后分组进行。通过条件控制工作流假如在工作流中指定了条件,运行时引擎将对条件进行计算,然后根据计算结果进行操 作。两种基丁条件的核心活动是ifelse和policyo ifelse活动的执行方式如同高级编程语 言中的一条典型的if语句。它可以包含任意多基于条件的分支,以及一个在其他条件不满 足情况卜执行的默认分支。而policy活动表示一系
8、列规则。在windows workflow foundation屮,一条规则包括一个条件以及一个或一个以上引发的操作。可以将规则看作 if-thcn-elsc语句,其中条件对应if块的boolean临界条件,操作定义了 then和else子 句。让我们进一步了解各个活动,然后对它们进行比较。当被添加到一个工作流中时,ifelse活动看起如图3所示。默认情况卜:它有两个分 支,可以通过右键单击并从上下文菜单中进行选择来添加新的分支。当运行吋引擎达到一个 ifelse活动,它开始计算从左至右进行的各分支的条件。各分支的条件被确定,第一个计算 结果为“true”的分支被运行。您可以通过活动的上下文菜
9、单屮的命令往返移动分支以更改 分支的计算顺序。要启用分支,需要指定有效的条件。您可以采用以下两种方法中的一种來 指定条件:通过表达式或通过一段代码。图 3 ifelse 的实际活动(click the image for a larger view)假如您选择使用表达式来指定条件,则要在设计器设置分支,并为visual studio 2005 的“属性”框中的“条件”项提供一个公共存放位置。接下來,打开表达式编辑器,输入一 个涉及工作流成员并几其计算值为布尔值的表达式。例如,假如工作流类具有名为 minimumlength的公共属性,您可以将条件设置如下:this.minimumlcngth
10、>= 8图4所示的编辑器完全支持intellisense?并提供对工作流私有成员和公共成员的访 问。这意味着您也可以调用boolean两数。假设您有一个属性声明如卜:public property minimumlength() as integergetreturn _minlengthend getset(byval value as integer)_minlength = valueend setend property图 4 针对 ifelsc 活动的 condition editor(click the image for a larger view)当您试图读取minimu
11、mlength的值时,运行时会结朿调用属性的get存取器。该存 取器能够回复私有成员.minlength的值。ifelsc活动中的最后分支町以没有条件。在这种 情况下,它将作为if工作流语句的else分支。指定条件的第二种方法是通过临吋代码。在这种情况下,您可以为工作流类添加方法, 例如:sub evalcondition(byval sender as object, by vai e as conditionaleventargs)e.result =' boolean valueend sub该函数必须与接受対象和conditionaleventargs类并回复void的签名相匹
12、配。 conditionaleventargs类的result成员将设登为布尔值,代表条件的计算结果。ifelsc活动可以进行嵌套以表示复杂的逻辑,但逻辑的设计仍然要在工作流中进行硬编 码。这种方法既有利也有弊。有利的一面在于它使您可以根据您的需求准确设计工作流并将 其与其他活动整合。当您需要创建一组规则來初始化部分工作流状态时,其不利的一面就显 现出来。让一连串ifelse活动仅仅为工作流的内部成员分配值显然有些矫枉过正。当您真正需要控制工作流的流动并连接各种工作块时,您应该使用ifelse活动组合。 假如您所需耍的仅仅是一个编程if语句序列,带有附加到分支的简单代码,那么最好便用 poli
13、cy活动。policy活动是一个规则集合。与各规则相关的代码仅限于设置工作流属性, 调用工作流方法或针对引用的程序集中的类型的静态方法。活动与已排序的规则集合相关联,您可以通过编辑器定义规则。每条规则都有优先级和 active属性。这两种属性的组合确定了是否应当评估规则,以及采用哪种优先级。另外, 规则还必须指定重估行为一"always (始终)”(默认值)或“never (从不)”。假如设置为 “always”,规则将根据需要进行重估,否则只进行首次评估,以后无论工作流状态如何变 化,也不再更改。然而,作为一个整体设置的规则要进行正向推理。简而言之,正向推理是指一个规则的 操作导致
14、具他相关规则被重估的能力。例如,对另一个规则测试的字段的值进行更新操作需 要对所涉及的规则进行重估(除非对该规则的重估被禁用)。正向推理有三种类型。隐式推 理表示运行时引擎将判定哪些字段被一些操作修改了,然后自动对它们进行重佔。只要操作 显式地作用于属性,这种机制即可成功。假如有如下操作,情况又会怎样:if this.minimumlength <= 8 then refreshinternalstate()有谁能够知道refreshlntemalstate方法将要做什么?该方法可能会触及涉及策略活动 中其他规则的工作流属性。通过使用方法声明中的属性,您可以显式地表示该方法的行为:<
15、;rulewrite(npasswordlever')> _public sub refreshinternalstate()me. pass wordle vel = 1end subrulewrite丿成性表示方法将耍修改指定的属性:同样,ruleread属性表示方法将姿从 指定的属性中进行读収。这样,就可以为运行时引擎提供明确清处的信息以确保规则设置同 步。最后,您可以编写显式调用对涉及的属性进行更新的操作。例如:if this.minimumlength <= 8 thenrefreshinternalstate() update(,'passwordlev
16、er,)规则操作中的update方法会计划对包含指定属性的所冇规则进行重佔。qqr推出数据恢复指南教程数据恢复指南教程数据恢复故障解析常用数据恢复 方案硬盘数据恢复教程数据保护方法数据恢复软件专业数据恢复服务指南循环和重复 活动这组活动提供了典型的while活动以及replicator活动,这些活动与典型的for循环 有些共同点。while活动接受条件并在每次迭代开始时对该条件进行计算。假如条件为 “true”,该活动将运行指定的子活动并重复直至条件为“false”。请注重在while主体内答 应进行单一活动。因此,您可能耍使用一个复合活动(如sequence或parallel)在循坏中 执行
17、多个活动。(在此处,使用术语“交错”可能比“并行”更加准确。因为没有涉及parallel 活动的并发,只冇同一线程内的交错。)与forcach语句类似,replicator活动创建并执行 指定的子活动的给定数虽的实例。您可以只指定一个子活动,但答应使用复合或口定义活动。 您不能通过声明性属性來控制迭代数。但是,您可以为初始化事件编写一个处理程序,并针 对各个需要的实例,使用初始化数据填充currentchilddata集合:sub replicator l_initialized(by vai sender as object, by vai e as eventargs)console.wr
18、iteline("initializing .")replicator 1 .currentchilddata.add("you are #1")replicatorl.currentchilddata.add("you are#2") replicator 1.currentchilddata.add("you are #3") end sub前血所述的代码段规定了 replicator的子活动的三个实例的顺序,每个实例均使用给 定的字符串进行初始化。请注重,假如您将currentchilddata集合宣为空,r
19、eplicator将不 运行任何了活动,并仅限于触发顶级事件,女fl initialized事件和completed事件。您可以 使用对象(不一定是字符串)初始化了活动,包括自定义类的实例。replicator还包括标示 各个子活动初始化和完成的事件。默认情况下,子实例按顺序运行,尽管通过设置 executiontype属性,您町以选择并行执行。假如需要并行执行,在复制器开始并执行并行 线程前,可以创建所有子活动实例。当以顺序模式执行时,只有当前一个活动结束时卜一个 活动才能被实例化。假如没有通过untilcondition属性设置全局条件,replicator将在所 冇复制完成后才结束,否则
20、,将在untilconclition为“true”时终止活动。值得注重的是, 尽管在所有子活动已完成并且untilcondition属性计算为“false”时活动将被挂起, replicator也从不通过类似while循环中的子活动进行循环。在对活动进行全局实例化后, 在每个子活动完成后以及所有包括的活动都已完成后,将对untilcondition进行计算。但 是有时,假如条件计算为"true", replicator将立即退出。您可以将conditionedactivitygroup (cag)活动中的条件执行和循环混合在一起。cag 包含一些子活动(可能是复合活动),并
21、可运行这些活动,直至满足全局条件。基本上,cag 组合了 while和ifelse活动的行为。通过以下伪代码来表示内部逻辑:while conditionif child 1.whcncondition then child 1 .executeif child2.whencondition then child2.executeif childn.whencondition then childn.executeend while毎个子活动都有whencondition属性。根据对指定条件的计算,可以在当前的迭代屮 运行或跳过活动。请注重,假如子活动没有whencondition集合,子活动
22、将只能在笫一次 被执行,并在后续的迭代小被跳过。假如需要,可以根据状态变化的依存关系对所有条件进 行计算。在untilcondition返回“true”并立即取消所有当前正在执行的活动后,cag活动将 终止。假如没有指定条件,当因为没有设置条件或者条件计算为“false”而没有子活动运行 时,cag也将结束。同步块涉及交错活动的顺序工作流都会对共享成员的访问进行系列化。然而,操作是不同的。 当两个或两个以上以交错方式运行的序列用到parallel活动时,操作是不同的。请看一下 图5o while活动包含两个序列块,然后,序列块又将parallel活动和代码活动联系在一起。 在内部,parall
23、el活动有四个块,每个块都对定义为工作流类成员的数字执行数学运算。 parallel活动的四个分支以交错方式执行。(每一次在工作流实例中只有一个线程。该线程 在parallel活动的分支间往返切换。)跨任务同步又如何呢?默认情况下,子活动内部运行 的每一段代码都进行对共享成员的直接访问。图 5 平行任务(click the image for a larger view)根据图5所示的简单架构,可能会出现每个分支都作为一个原了操作来运行的情况。 这纯加巧合,运行严格依据各操作的复杂性和持续时间。假如每个分支由多个活动组成,情 况会怎样? synchronizationscope提供了声明性和明
24、确的同步存取建模方法,它可以实现对 一组活动中一个给定工作流实例内的共亨状态进行同步存取。synchronizationscopc活动内运行的工作流部分是一种不能中断的原了操作。此处没冇 事务语义,synchronizationscope活动屮包含的操作不能i叫滚。在所冇基于活动(这些活动 具有并行执行路径,如parallel、replicator和cag)的解决方案中,synchronizationscope 活动起着要害作用。图6可以帮助您快速体验synchronizationscopc活动的作用,该图是图5中工作流的 修改版本。blockmultiply活动对延迟交错的两个代码块进行计数
25、。blockdivide活动包含一 个未同步的代码块。假如您将blockmultiply的内容放到同步范围之外,blockdivide将可 能在blockmultiply的延迟阶段执行。根据耍进行的更新的种类不同,这对能会成为一个严 重问题。synchronizationscope活动可确保丁作流部分的连续性。图 6 平行任务与同步范|节|(click the image for a smaller view) qqr推出数据恢复指南教程 数据恢复指南教程 数据恢复故障解析 常用数据恢复 方案硕盘数据恢复教程数据保护方法数据恢复软件专业数据恢复服务指南界常处理正如其他基于.net的应用程序一样
26、,工作流能够引发和捕捉异常。非凡是,您可以 使用throw活动來引发一个特定的异throw活动需要儿个设置一要引发的界常的类 型,存储异常对象实例以进行进一步自定义的工作流类成员。只要在工作流项冃中引用了类 型,您就可以使用自定义的异常类型。耍捕捉丄作流活动引发的界常,您要添加faulthandler活动。工作流设计器提供了一 个用于您添加的错课处理程序的容器。每个处理程序一定是某个工作流的一部分,一旦捕捉 异常,该程序即执行。添加faulthandler活动后,您可以定义要捕捉的异常的类型。您可 以通过fault加性访问显常对彖。值得注重的是,要可视化错误处理程序,您必须在visual st
27、udio 2005设计器中切换视图并通过单击设计器视图底部的选项卡列表來选择“view faults (查看错谋)”选项卡。事务.net framework 2.0包括一个轻松而有效处理事务的对彖一无论参与对彖的数冃和 类型以及范i韦i如何,也无论事务是木地的还是分布式的。该对象被命名为transactionscope, -般情况下,您可以根据如下模式进行使用:using ts as new transactionscope ts.completeend usingtransactionscope对象保证在出现故障的惜况下,事务既可以被提交也可以被回滚,更 为重要的是,它可以确定您需要一个木地
28、事务还是一个分布式事务,并登记所冇必要的资源。 当代码到达一个无法本地运行的点时,相应地,transactionscope提升至分布式事务处理协 调器(dtc)。实施itnmsaction接口的所有对象可以随-个事务一起登记。该列表包括所 冇标准ado.net 2.0数据提供程序,并fl microsoft消息队列以兼容模式工作。值得注重的是对于分布式事务,transactionscope和企业服务之间存在一些差别。 transactionscope属于专门针对基于.net的应用程序而设计的事务框架 一 system.transactions«在内 n|j, system.trans
29、actions 命名空间的类有时会以为 dtc 和 com+ 委派一些工作作为结束。为什么在这一点上transactionscope至关重要? transactionscope windows workflow foundation 活动仅仅是 transactionscope .net 类实例的一个工作流包 装程序。当您为工作流添加transactionscope活动时,您可以设置要完成的事务的超时时间, 并设置所需的隔离级别。事务范围内组合的所有活动形成了能够实现典型acid架构的工 作单位。在所有子活动都成功完成后将提交事务,工作流继续进行到下一步。假如在范围内 引发异常,transac
30、tionscope活动自动回滚。编写事务性工作流并不要求您显式地处理提交 和回滚语义一假如您要提交事务和引发异常'來屮止事务,您只需顺具白然。该活动将可以 轻松治理其他任何事情。请注重,您不能嵌套两个或两个以上的transactionscope活动。同样地,您不能使用 suspend活动挂起事务内的工作流。然而,您可以通过listen或eventhandlingscope活动, 将事件处理程序整合到事务屮。在这种情况卜工作流主机应当包js持久性服务,否则,假 如工作流试图将它的状态保存为空闲状态,会引发异常。此外,相关的活动,如 compcnsatablctransactionscop
31、c还支持补偿。补偿是在冇后续业务预期的情况下,从逻辑上 撤消已完成的事务的过程。补偿与回滚不同,因为它是一种当工作流屮发生违反规则的情况 时,収消已成功完成和提交的事务所产牛的影响的有效方法。在两个帐户间进行资金划转的 事务是一个典型的回滚示例。第一个调用将资金从一个帐户中取出,第二个调用将相同数额 的资金划转至另一个帐户。只要数据库支持两阶段提交模型,假如在事务屮引发异常,i叫滚 可恢复一致的状态。设想一下一个订单处理工作流,其中一个事务被用于通过信用卡进行支付。第一步,首 先从信川卡中捉取资金來支付货款。然后,在交易成功完成后,该货物不能再被销售。假如违反了业务规则,需要按照合适的规定对交
32、易结果进行补偿一一般是将资金划入签帐卡。通过右键单击compensatabletransactionscope活动,您可以切换到事务的“补偿”视 图并添加所有补偿事务影响所需的活动。在图7中,orderscope事务与补偿活动规定相关 联,该规定要求在出现业务异常的情况下,应将已提取的资金退冋。正如我前而谈到的,工 作流屮的异常是通过异常处理程序捕捉的。对于某一特定异常(如productdiscontinued), 您可以调用一个compensate活动,该活动已绑定到其影响作用已被取消的事务活动。一般 情况下,compensate活动会触发适用于任何可被补偿的活动(即,适用于实施 icompensatableactivity 接口 的活动)的补偿机制。与 compensatabletransactionscope 一起, compensatablesequence也实施了木接口并能够用于非事务性的补偿怙:况。不过,您也可以 编写支持补偿的自定义活动。图 7 事务与补偿活动(click the image for a larger view)调用其他代码此外,还有一些活动可调用和执行代码。这些活动包扌舌:code、invoke workflow >
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 业务合作往来信用证明书(7篇)
- 基础工程中的安全防护措施
- 真实有效的股东出资证明书(5篇)
- 二年级上册识字课教学教案
- 餐饮企业食品安全自查及整改措施
- 游记的八年级作文700字7篇
- 智能桥梁监测系统的应用与措施
- 餐饮行业疫情防控岗位职责
- 强脊炎的护理
- 提升学生课后学习体验的策略计划
- 中国文化概论知识试题及答案
- 烟台购房协议书
- 2025年中考生物模拟测试卷及答案
- 中国经导管主动脉瓣置换术临床路径专家共识(2024版)解读
- 山西洗煤厂安全管理人员机考题库大全-上(单选、多选题)
- 硅酸钙板、含锆型硅酸铝纤维棉、高铝型硅酸铝纤维棉技术规格
- 小学二年级下册道德与法治《小水滴的诉说》教学教案
- GB∕T 15762-2020 蒸压加气混凝土板
- 护士分层级培训与管理课件
- 照明电气安装工程施工方案及工艺方法要求
- 公路工程施工安全技术规范-JTG-F90-2015
评论
0/150
提交评论