代码改变世界

随笔分类 -  《WF编程》笔记

《WF编程》系列之28 - 本地通信事件:CallExternalMethodActivity

2007-08-03 16:47 by Windie Chai, 4233 阅读, 收藏, 编辑
摘要: 让工作流和外部世界进行交互也并不是什么难事,因为WF本身就内置了一些活动来完成这样的工作. 为了能让本地通信可以工作,我们需要以.NET接口的形式定义一个合同.在这个接口中会包含一些方法和事件,工作流可以通过这些方法来调用本地服务,而本地服务则可以触发这些会被工作流处理的事件. 阅读全文

《WF编程》系列之27 - 基本活动:EventHandlingScopeActivity & SynchronizationScopeActivity & ReplicatorActivity

2007-07-27 02:41 by Windie Chai, 3531 阅读, 收藏, 编辑
摘要: 和Listen活动类似,EventHandlingScope活动也可以包含多个等待事件的分支.那么这两个活动的区别是什么呢? Parallel活动会同时执行它的每个分支, SynchronizationScope活动则正好相反,它的作用是阻止将要同时执行的活动,并让它们一个接一个的执行. Replicator活动和While活动类似,而且更加复杂.也可以这样理解,Repicator活动只能包含一个子活动,在其运行时,会取出InitialChildData属性中的所有数据,然后为每一个数据创建一个子活动的副本. 阅读全文

《WF编程》系列之26 - 基本活动:ParallelActivity & DelayActivity & ListenActivity

2007-07-26 15:11 by Windie Chai, 3678 阅读, 收藏, 编辑
摘要: Parallel活动允许多个活动同时执行并等待它们全部完成; 与它相似,Listen活动也可以包含多个分支.但不同的是Listen活动的目的仅仅是完成一个分支; Delay活动会初始化一个计时器并等待它到期,经常用来模拟超时. 本节我们使用这三个活动来模拟一个文件在公司的审批流程. 阅读全文

《WF编程》系列之25 - 基本活动:InvokeWorkflowActivity

2007-07-25 09:27 by Windie Chai, 3302 阅读, 收藏, 编辑
摘要: InvokeWorkflow活动可以在工作流执行过程中异步的执行另一个工作流.我们可以设置这个外部工作流的输入参数,却无法直接获取其输出参数(因为执行过程是异步的). 本节非常简单的介绍了InvokeWorkflow的基本概念,属性和事件,关于这个活动的详细探讨,包括如何获取外部工作流的输出参数,将在以后的文章中分享. 阅读全文

《WF编程》系列之24 - 基本活动:SuspendActivity & TerminateActivity & ThrowActivity

2007-07-24 14:17 by Windie Chai, 3102 阅读, 收藏, 编辑
摘要: 这一节我们来介绍SuspendActivity,TerminateActivity和ThrowActivity. 这三个活动有一个共同的特点是都可以中断工作流的执行,不同的是Suspend用来暂停工作流,Terminate用来终止工作流,而Throw则可以抛出异常. 本节将介绍这三个活动的简单使用方法以及关键属性. 阅读全文

《WF编程》系列之23 - 基本活动:IfElseActivity & WhileActivity & SequenceActivity

2007-07-23 09:27 by Windie Chai, 3613 阅读, 收藏, 编辑
摘要: 这一节介绍两个基本活动:IfElse,While和Sequence. 这三个活动都是复合活动,它们都可以包含多个子活动,但While活动有个特殊的限制,它只能直接包含一个子活动. 本节将介绍这三个活动的简单使用方法,子活动,以及关键属性. 阅读全文

《WF编程》系列之22 - 基本活动:CodeActivity

2007-07-20 09:07 by Windie Chai, 3358 阅读, 收藏, 编辑
摘要: 活动是组成工作流的基本块.Windows Workflow的基本活动库包含了一些都通用的工作流活动.功能涉及流程控制,事务管理,本地通信,Web Services以及其他等等.这些活动都在工具箱中可以找到.有一些活动比较简单,比如CodeActivity,它的工作就是执行一段代码.而有的活动就比较复杂,如PolicyActivity可以以正向链法(forward chaining)来估算优先级. 通过使用这些基本活动,我们可以构建强大的工作流. 从这篇随笔开始,我将逐个介绍基本活动库中的所有活动,第一个出场的是一直出现在范例中的CodeActivity. 阅读全文

《WF编程》系列之21 - 故障 Faults

2007-07-19 09:34 by Windie Chai, 2946 阅读, 收藏, 编辑
摘要: 和所有软件一样,工作流未必总是能够完美的执行.例如,数据库服务器的故障就可能使工作流抛出异常.此外,我们还可以通过TrowActivity来人为的抛出一个异常. 在工作流内部管理异常和管理C#中的异常类似.复合活动包含一个故障处理程序(fault handlers)来捕捉异常. 在.NET中,异常一直向上传递直到.NET Runtime为其找到合适的异常处理程序.在工作流内部也是一样,如果活动没有处理发生的异常,Runtime会把这个异常传递给它的父活动.如果Runtime无法找到故障处理程序,Runtime会终止工作流并触发WorkflowTerminated事件. 阅读全文

《WF编程》系列之20 - 触发事件与调用方法:宿主的实现

2007-07-17 09:38 by Windie Chai, 4198 阅读, 收藏, 编辑
摘要: 我们已经实现了服务合同,服务以及工作流,本节来实现这一范例的最后一块:宿主. 阅读全文

《WF编程》系列之19 - 触发事件与调用方法:服务以及工作流的实现

2007-07-16 14:27 by Windie Chai, 4650 阅读, 收藏, 编辑
摘要: 上一节中我们已经实现了服务合同,这一节我们来实现具体的服务以及工作流. 阅读全文

《WF编程》系列之18 - 触发事件与调用方法:服务合同 Service Contracts

2007-07-13 10:58 by Windie Chai, 4574 阅读, 收藏, 编辑
摘要: 许多开发人员想要建立一个更加正式的机制来方便和工作流交互.尽管使用Dictionary可以简单灵活的向工作流传递数据,但这种方法需要参数名称和伴随属性的严格匹配.而且我们只可以在工作流开始时使用参数向工作流传递数据,或在结束是获取数据.许多工作流需要在执行过程的不同时期和宿主交换数据.我们可以使用事件和方法调用来达到这个目的.这一节,我们来讨论数据传输通信的基本原理. 工作流和其宿主可以通过本地通信服务(LCS,local communication service)交换数据.LCS允许工作流和宿主之间的事件和方法调用.在后台,工作流Runtime和LCS一起工作来截取通信并提供附加服务(就像事件在排队直到工作流处于可以接受事件的状态). 阅读全文

《WF编程》系列之17 - 工作流与外部事件:工作流参数

2007-07-11 09:49 by Windie Chai, 4161 阅读, 收藏, 编辑
摘要: 如何向工作流传递参数? 阅读全文

《WF编程》系列之16 - 工作流与外部世界:生存周期事件

2007-04-28 16:44 by Windie Chai, 4656 阅读, 收藏, 编辑
摘要: 对许多工作流来说,有一个重要的步骤是决定工作流与应用程序之间如何交互.我们如何得知工作流是否顺利完成?如何从运行中的工作流实例获取数据?如何获取已经完成的工作流的数据?这一节,我们来介绍一些解决这些问题的基本技术原理. 工作流的基本通信机制包括事件,方法和工作流参数.应用程序可以触发工作流实例的事件,也可以从工作流Runtime接收工作流实例的生存周期事件.首先我们来讨论一下工作流的生命周期事件. 阅读全文

《WF编程》系列之15 - 顺序工作流与SequenceActivity

2007-04-26 10:54 by Windie Chai, 5960 阅读, 收藏, 编辑
摘要: 简单的介绍一下顺序工作流与SequenceActivity. 阅读全文

《WF编程》系列之14 - 工作流编写方式:结合代码与XAML

2007-04-25 12:18 by Windie Chai, 4121 阅读, 收藏, 编辑
摘要: Visual Studio还提供另外一种生成工作流的方式:代码分离与XAML标记结合的方式,即通常我们所说的code-beside.采用这种方式时,设计器会将工作流标记存储到一个XOML文件中,我们则可以在C#或Visual Basic源代码文件里扩充定义. 阅读全文

《WF编程》系列之13 - XAML激活

2007-04-24 11:28 by Windie Chai, 3591 阅读, 收藏, 编辑
摘要: 通过XAML激活机制,我们可以使Runtime加载一个XAML文件来启动工作流. 阅读全文

《WF编程》系列之12 - 编译工作流:XAML序列化

2007-04-23 16:23 by Windie Chai, 4058 阅读, 收藏, 编辑
摘要: 将工作流序列化为XAML 阅读全文

《WF编程》系列之11 - 编译工作流:使用MSBUILD

2007-04-16 15:52 by Windie Chai, 3767 阅读, 收藏, 编辑
摘要: MSBuild是.NET 2.0 Runtime中包含的基于XML的生成引擎.Visual Studio中所有的.csproj和.vbproj项目文件都可以看作是MSBuild文件. Visual Studio 2005生成项目的过程实际上是IDE使用MSBuild托管的线程来执行的.开发人员也可以直接从命令行使用MSBuild并传递参数.Windows Worklow在安装时已经将.xoml扩展名注册给了MSBuild.本节我们将使用MSBuild生成自定义活动和工作流到同一个程序集中,我们还是使用之前创建的XOML文件,然后创建一个MSBuild项目文件. 阅读全文

《WF编程》系列之10 - 编译工作流:使用WorkflowCompiler类

2007-04-11 10:58 by Windie Chai, 3716 阅读, 收藏, 编辑
摘要: 我们可以使用WorkflowCompiler类和WorkflowCompilerResults类以编程的方式来编译工作流定义并得到一个程序集. 阅读全文

《WF编程》系列之9 - 编译工作流:使用WFC.EXE

2007-04-09 10:42 by Windie Chai, 4484 阅读, 收藏, 编辑
摘要: Windows Worfklow提供两种工作流编译方式,通过WorkflowCompiler类(位于System.Workflow.ComponentModel.Compiler名称空间)来编译,或者使用一个命令行编译工具(其实还是通过WorkflowCompiler类实现编译的). WF的命令行编译器叫做wfc.exe.用它来编译工作流,我们需要传递一些参数给它.第一个参数是XOML文件的名称,假设我们的XAML叫做pureXAML.xoml.然后使用-out指令来传递编译后程序集的名称.如果有一些自定义活动是在另外的程序集中定义的,我们需要使用-r指令来引用这些程序集. 阅读全文