08 2008 档案

摘要:Workflow学习之Activity 阅读全文
posted @ 2008-08-28 15:50 学-无-止-境 阅读(1094) 评论(0) 推荐(0) 编辑
摘要:状态机工作流的并行事件 在上一篇文章《MOSS多级审批工作流【StateMachine版】》中,有这样一个情景,我创建了两个任务,并且要等到这两个任务都完成后,根据其结果进行一些操作。在这一部分,我遇到一个问题,如何并行的处理这两个任务呢? 已知一个EventDrivenActivity不能跳转到一个以上的StateActivity中,所以我只能在同一个StateActivity中处理... 阅读全文
posted @ 2008-08-27 13:18 学-无-止-境 阅读(588) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之附录 电子版下载地址 3月份开始读《Programming Windows Workflow Foundation: Practical WF Techniques and Examples using XAML and C#》一书并写《WF编程》笔记,拖拖拉拉写到现在,居然也翻译了全书的一半。 这期间和很多朋友通过评论、留言、Email和IM等方式(就差写信了)就编写WF程... 阅读全文
posted @ 2008-08-27 13:17 学-无-止-境 阅读(318) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之43 - 工作流宿主:持久化服务 Persistence Services 工作流在长时间运行时难免会遇到一些问题,许多业务逻辑需要花费数日、数周乃至数月。在这段时间中,我们不能让工作流实例一直驻留在内存中(比如,我们需要一份开支报告,而不巧的是对此负责的会计师却在西班牙海滩休假,怎么办呢?)。在Windows Workflow中,可以通过持久化服务来解决长时间运行的工作流... 阅读全文
posted @ 2008-08-27 13:16 学-无-止-境 阅读(965) 评论(1) 推荐(0) 编辑
摘要:《WF编程》系列之42 - 工作流宿主:调度(Scheduling)服务 在WF中,调度服务的职责是将工作流安排到线程上来执行。WF提供了两个调度服务:DefaultWorkflowSchedulerService和ManualWorkflowSchedulerService。如果我们不去显式的配置调度服务,Runtime会使用默认的调度器(DefaultWorkflowSchedulerS... 阅读全文
posted @ 2008-08-27 13:15 学-无-止-境 阅读(311) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之39 - 自定义活动:继承法与活动组件 从根本上来说,采用组成法或继承法来创建自定义活动并没有太大的差别.之前我们创建的GetUploadActivity就是从SequenceActivity类继承的.组成法和继承法都使用了继承. 继承法相对组成法来说更容易理解.在组成法中,我们关注于如何组织自定义活动内的子活动,并且创建了活动属性和执行模型.而继承法是一种相对更加初级的方法... 阅读全文
posted @ 2008-08-27 13:14 学-无-止-境 阅读(235) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之41 - 工作流宿主:日志和配置文件 6 工作流宿主 Windows Workflow 其实是一个Runtime,而不是应用程序。在启动工作流之前,宿主进程必须先加载并运行工作流Runtime。宿主进程告诉Runtime要创建什么类型的工作流,Runtime则负责管理工作流的生命周期并通知宿主进程重要的生命周期事件,比如工作流的完成和终结。Runtime并不挑剔它的宿主,宿... 阅读全文
posted @ 2008-08-27 13:13 学-无-止-境 阅读(279) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之40 - 自定义活动:活动的执行 在Windows Workflow中,活动的状态共有六种。这些状态通过ActivityExecutionStatus枚举来表示:Initialized、Executing、Closed、Canceling、Compensating和Faulting。所有活动都从Initialized状态开始,并以Closed状态结束。下图描绘了状态之间可能进... 阅读全文
posted @ 2008-08-27 13:12 学-无-止-境 阅读(206) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之38 - 依赖属性 引进依赖属性的最终目标是管理状态.依赖属性并不是Windows Workflow专有的,与WF类似,同样使用XAML来表示的Windows Presentation Foundation也应用了依赖属性.在WF中,依赖属性拥有下列关键的功能: 活动数据绑定 附加属性 元数据 每个使用依赖属性的类最终都继承自一个抽象类:D... 阅读全文
posted @ 2008-08-27 13:12 学-无-止-境 阅读(342) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之37 - 打开黑盒子:属性升级 组合活动就像一个黑盒子,工作流设计器无法获取这个黑盒子内部的属性和事件,除非我们把这些属性和事件曝露给外部世界.属性升级(Property promotion)允许组合活动的设计者去决定属性对于外部世界的可见性. 5.3.1.1 属性升级 (PROPERTY PROMOTION) 属性升级会在父活动属性和子活动属性之间建立连接.我们可以这样去理... 阅读全文
posted @ 2008-08-27 13:11 学-无-止-境 阅读(263) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之36 - 自定义活动:如何创建自定义活动?活动的组合 5.2 如何创建自定义活动? 有两种方式可以创建自定义活动,即通过组合的方式和使用继承的方式. 组合是一种简单的创建工作流的方式.我们在设计器中拖拽并配置活动的属性,然后把这个自定义活动封装成一个程序集,这样就可以供其它工作流项目使用了.这种方式的优点是快速并且简单. 使用继承的方式来创建自定义活动,我们需要编写一个类,... 阅读全文
posted @ 2008-08-27 13:11 学-无-止-境 阅读(202) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之35 - 自定义活动:为何创建自定义活动? 5 自定义活动 使用通用的framework来开发软件虽然轻松,但却不够高效.我们每天都会遇到一些问题,只有使用专门面向这些问题的framework来开发软件才是真正的轻松并且高效.通过自定义活动,我们可以为这些日常问题量身打造工作流.自定义活动可以用来解决特定业务领域的问题,譬如,医疗软件中化验病人的血液样本的过程;我们也可以为... 阅读全文
posted @ 2008-08-27 13:10 学-无-止-境 阅读(180) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之34 - 基本活动:状态活动 到目前为止,我们所讨论的工作流都是顺序工作流,而WF还支持另外一种工作流机制-状态机(State-Machine)工作流,本节就来介绍这些在状态机工作流中工作的活动. 一个状态机是由一系列状态(State)组成的.譬如,用来模拟软件bug跟踪的状态机工作流也许会包含以下四个状态:开启,分配,关闭和延期,工作流总是处于其中一个状态中.状态机的执行完... 阅读全文
posted @ 2008-08-27 13:09 学-无-止-境 阅读(216) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之33 - 基本活动:Web Services 4.6 Web Services 今时今日,一个完善的软件无可避免的需要发送或接受SOAP请求,WF也包含了一些围绕Web Services的客户端或者服务器端的活动. 4.6.1 InvokeWebServiceActivity InvokeWebService活动用来调用一个外部Web Service.当我们把这个活动添加到... 阅读全文
posted @ 2008-08-27 13:09 学-无-止-境 阅读(201) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之32 - 基本活动:条件与规则 4.5 条件与规则 WF中关于条件和规则的活动有两个: ConditionedActivityGroup(CAG) 活动和Policy活动.虽然我们也把CAG视作控制流的活动,但事实上CAG更加侧重于对条件和规则的控制. 4.5.1 ConditionedActivityGroup CAG是一个强大的活动,它可以结合规则和代码来达到目的.C... 阅读全文
posted @ 2008-08-27 13:08 学-无-止-境 阅读(279) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之31 - 基本活动:事务(Transactions)与补偿(Compensation) 4.4 事务(Transactions)与补偿(Compensation) 在WF中,事务也遵从ACID(Atomic,原子性;Consistent,一致性;Isolated,不相关性;Durable,持久性)理论.也就是说,WF Runtime也会用到System.Transactio... 阅读全文
posted @ 2008-08-27 13:08 学-无-止-境 阅读(255) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之30 - 基本活动:错误处理 4.3 错误处理 Fault,故障,现在官方已经将其翻译为错误,那么以后的随笔中我也就采用官方的翻译吧. 错误处理也属于流程控制的一部分,这一节我来介绍一下有关错误处理的活动.错误是指在工作流执行期间发生的异常.我们可以使用错误处理程序来捕捉这些异常并尝试做一些”修复”工作.我们可以补偿提交的事务,或者发送Email来警告管理员并等待丢失的... 阅读全文
posted @ 2008-08-27 13:08 学-无-止-境 阅读(179) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之29 - 本地通信事件:HandleExternalEventActivity & 活动生成器 4.2.2 HandleExternalEventActivity 像CallExternalMethod活动一样,HandleExternalEvent活动也有一个必须设置的InterfaceType属性.当我设置这个属性之后,我们就可以设置EventName属性了: 如果... 阅读全文
posted @ 2008-08-27 13:07 学-无-止-境 阅读(186) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之28 - 本地通信事件:CallExternalMethodActivity 4.2 本地通信事件 让工作流和外部世界进行交互也并不是什么难事,因为WF本身就内置了一些活动来完成这样的工作. 这一节我们来讨论一下可以和宿主进程提供的本地服务进行通信的活动们 为了能让本地通信可以工作,我们需要以.NET接口的形式定义一个合同.在这个接口中会包含一些方法和事件,工作流可以... 阅读全文
posted @ 2008-08-27 13:07 学-无-止-境 阅读(176) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之27 - 基本活动:EventHandlingScopeActivity & SynchronizationScopeActivity & ReplicatorActivity 4.1.12 EventHandlingScopeActivity 和Listen活动类似,EventHandlingScope活动也可以包含多个等待事件的分支.我们可以在EventHandlin... 阅读全文
posted @ 2008-08-27 13:06 学-无-止-境 阅读(213) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之26 - 基本活动:ParallelActivity & DelayActivity & ListenActivity 4.1.9 ParallelActivity Parallel活动允许多个活动同时执行,但Parallel活动并没有采用多线程机制,在工作流内部只有一个线程执行. 看起来好像有点复杂,这样说吧,假设一份文件需要公司里三位领导的批准:CEO,CTO和CF... 阅读全文
posted @ 2008-08-27 13:04 学-无-止-境 阅读(189) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之25 - 基本活动:InvokeWorkflowActivity 4.1.8 InvokeWorkflowActivity InvokeWorkflow活动可以异步的执行另一个工作流.因为执行过程是异步的,所以我们无法获取另一个工作流的输出参数,但我们可以和宿主建立额外的通信机制来获取其输出. 在设计器中,我们设置InvokeWorkflow的TargetWorkflow... 阅读全文
posted @ 2008-08-27 13:04 学-无-止-境 阅读(156) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之24 - 基本活动:SuspendActivity & TerminateActivity & ThrowActivity 4.1.5 SuspendActivity 当工作流遇到错误而需要手工干预时,我们可以使用Suspend活动来暂时挂起工作流. Suspend活动有一个字符串类型的Error属性. 宿主可以订阅工作流Runtime的WorkflowSuspende... 阅读全文
posted @ 2008-08-27 13:04 学-无-止-境 阅读(195) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之23 - 基本活动:IfElseActivity & WhileActivity & SequenceActivity 4.1.2 IfElseActivity IfElse活动和C#中的if…else语句很像,它的内部是一个或更多的IfElseBranch(分支)活动,每个分支活动都有一个Condition(条件)属性.除最后一个分支之外,其它分支的Condition... 阅读全文
posted @ 2008-08-27 13:03 学-无-止-境 阅读(207) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之22 - 基本活动:CodeActivity 4 基本活动库 活动是组成工作流的基本块.Windows Workflow的基本活动库包含了一些都通用的工作流活动.功能涉及流程控制,事务管理,本地通信,Web Services以及其他等等.这些活动都在工具箱中可以找到.有一些活动比较简单,比如CodeActivity,它的工作就是执行一段代码.而有的活动就比较复杂,如Pol... 阅读全文
posted @ 2008-08-27 13:03 学-无-止-境 阅读(189) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之21 - 故障 Faults 3.3 故障 Faults 和所有软件一样,工作流未必总是能够完美的执行.例如,数据库服务器的故障就可能使工作流抛出异常.此外,我们还可以通过TrowActivity来人为的抛出一个异常. 在工作流内部管理异常和管理C#中的异常类似.复合活动包含一个故障处理程序(fault handlers)来捕捉异常. 在.NET中,异常一直向上传递直... 阅读全文
posted @ 2008-08-27 13:02 学-无-止-境 阅读(221) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之20 - 触发事件与调用方法:宿主的实现 3.2.3.4 宿主的实现 最后,我们需要编写一个宿主来执行工作流. WorkflowRuntime runtime = new WorkflowRuntime(); ExternalDataExchangeService dataService; dataService = new ExternalDataExchan... 阅读全文
posted @ 2008-08-27 13:02 学-无-止-境 阅读(248) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之19 - 触发事件与调用方法:服务以及工作流的实现 3.2.3.2服务的实现 本例中的服务只需要提供IBugFlowService接口的实现即可.它将作为宿主和bug跟踪工作流之间的桥梁. public class BugFlowService : IBugFlowService { public void AssignBug(Bug bug) { Conso... 阅读全文
posted @ 2008-08-27 13:01 学-无-止-境 阅读(338) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之18 - 触发事件与调用方法:服务合同 Service Contracts 3.2.3 触发事件与调用方法 许多开发人员想要建立一个更加正式的机制来方便和工作流交互.尽管使用Dictionary可以简单灵活的向工作流传递数据,但这种方法需要参数名称和伴随属性的严格匹配.而且我们只可以在工作流开始时使用参数向工作流传递数据,或在结束是获取数据.许多工作流需要在执行过程的不同... 阅读全文
posted @ 2008-08-27 13:01 学-无-止-境 阅读(146) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之17 - 工作流与外部事件:工作流参数 居然有两个多月没有更新WF笔记,这段时间也许真的太忙了,毕业的事情,工作的事情,从今天起继续更新. 3.2.2 工作流参数 Runtime的CreateWorkflow方法有一个重载允许我们向新的工作流实例传递参数,参数的类型是Dictionary(名值对的集合).... 阅读全文
posted @ 2008-08-27 13:01 学-无-止-境 阅读(201) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之16 - 工作流与外部世界:生存周期事件 3.2 工作流与外部世界 对许多工作流来说,有一个重要的步骤是决定工作流与应用程序之间如何交互.我们如何得知工作流是否顺利完成?如何从运行中的工作流实例获取数据?如何获取已经完成的工作流的数据?这一节,我们来介绍一些解决这些问题的基本技术原理. 工作流的基本通信机制包括事件,方法和工作流参数.应用程序可以触发工作流实例的事件,也... 阅读全文
posted @ 2008-08-27 13:00 学-无-止-境 阅读(228) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之15 - 顺序工作流与SequenceActivity 3 顺序工作流 Windows Worklow提供两种现成可用的工作流执行风格:顺序和事件驱动(event-driven).顺序工作流的执行过程是一个连续的步骤序列,它在完成一个活动之后会去执行到下一个.比如用顺序工作流模拟将访问记录从网站日志转移到数据库中的操作:第一步,下载日志文件;第二步,将日志批量插入数据库中... 阅读全文
posted @ 2008-08-27 13:00 学-无-止-境 阅读(265) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之14 - 工作流编写方式:结合代码与XAML 2.4结合代码与XAML Visual Studio还提供另外一种生成工作流的方式:代码分离与XAML标记结合的方式,即通常我们所说的code-beside.采用这种方式时,设计器会将工作流标记存储到一个XOML文件中,我们则可以在C#或Visual Basic源代码文件里扩充定义.这种开发方式的项目模板是Sequential ... 阅读全文
posted @ 2008-08-27 12:59 学-无-止-境 阅读(255) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之13 - XAML激活 2.3.3 XAML激活 在有些环境中,编译过程会变成一种负担.想象一下,数据库中包含了上千个为特定用户量身打造的工作流定义.在这种情形下,我们也许想要避免总是创建新的程序集而引起的性能消耗.而我们需要的就是以最低的开销加载工作流,然后执行.幸运的是,这正是以纯XAML方式编写工作流的优点. 如果要激活之前创建的工作流,我们需要调整一下XOML文件.... 阅读全文
posted @ 2008-08-27 12:59 学-无-止-境 阅读(249) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之12 - 编译工作流:XAML序列化 2.3.2.4 XAML序列化 我们可以从工作流实例中生成XAML,因为XAML本质上就是托管对象的XML序列化.下面的代码将输出正在运行的工作流的标记: using (WorkflowRuntime runtime = new WorkflowRuntime()) using (StringWriter stream = new ... 阅读全文
posted @ 2008-08-27 12:57 学-无-止-境 阅读(311) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之11 - 编译工作流:使用MSBUILD 2.3.2.3 使用MSBuild MSBuild是.NET 2.0 Runtime中包含的基于XML的生成引擎.Visual Studio中所有的.csproj和.vbproj项目文件都可以看作是MSBuild文件. Visual Studio 2005生成项目的过程实际上是IDE使用MSBuild托管的线程来执行的.开发人员也可... 阅读全文
posted @ 2008-08-27 12:57 学-无-止-境 阅读(218) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之10 - 编译工作流:使用WorkflowCompiler类 2.3.2.2 使用WorkflowCompiler类 我们可以使用WorkflowCompiler类和WorkflowCompilerResults类以编程的方式来编译工作流定义并得到一个程序集.其实Wfc.exe就是通过使用WorkflowCompiler类来执行编译过程的.下图是和编译相关的几个类: ... 阅读全文
posted @ 2008-08-27 12:56 学-无-止-境 阅读(351) 评论(1) 推荐(0) 编辑
摘要:《WF编程》系列之9 - 编译工作流:使用WFC.EXE 2.3.2 编译工作流 Windows Worfklow提供两种工作流编译方式,通过WorkflowCompiler类(位于System.Workflow.ComponentModel.Compiler名称空间)来编译,或者使用一个命令行编译工具(其实还是通过WorkflowCompiler类实现编译的). 工作流编译器在将工作流定义... 阅读全文
posted @ 2008-08-27 12:55 学-无-止-境 阅读(252) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之8 - 工作流编写方式:纯XAML 2.3 纯XAML 下面是一段纯XAML的工作流定义: 这段XAML的根元素是SequentialWorkflowActivity.WF的根活动可以是SequentialWorkflowActivity或StateMachineWorkflowActivity.这两个类以不同方式管理其子活动的执行过程.... 阅读全文
posted @ 2008-08-27 12:55 学-无-止-境 阅读(537) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之7 - 工作流编写方式:对象及其关系 2.2对象及其关系 工作流最终会变成内存中的一组托管对象.这些对象之所以能够依照我们的构思来执行,是因为我们用一种关系把它们组织到了一起.不仅是工作流,看看一些Windows应用程序的代码: button1 = new System.Windows.Forms.Button(); button1.Location = new Syst... 阅读全文
posted @ 2008-08-27 12:54 学-无-止-境 阅读(266) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之6 - 工作流编写方式:纯代码 2 工作流编写方式 Visual Studio 2005中的工作流设计器可以使用拖拽来设计工作流.在本章中,我们将通过设计器创建工作流,然后探索发生在后台的细节,最后我们将看到工作流定义变成了.NET程序集中的一个类型.由于Windows Worklow的灵活性,我们有许多途径可以将设计器中的工作流变成编译后的类型. 我们可以采用纯定义的方式(... 阅读全文
posted @ 2008-08-27 12:53 学-无-止-境 阅读(352) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之5 - 漫游工作流:第一个工作流 1.2.4 第一个工作流 还记得项目经理经常问我”做完了吗?”.在这一节中,我们把烦人的项目经理换成简单的工作流程序.这个例子并没有用到工作流平台的所有的功能,只是简单的创建并运行一个工作流. 在开始之前,我们需要安装.NET 3.0 framework.支持.NET 3.0 framework的开发工具包括Visual Studio 200... 阅读全文
posted @ 2008-08-27 12:52 学-无-止-境 阅读(310) 评论(1) 推荐(0) 编辑
摘要:《WF编程》系列之4 - 漫游工作流:Widows Workflow Runtime及其服务 1.2.3 Widows Workflow Runtime 在Windows Workflow中,活动可以视作提交给工作流处理器执行的指令或代码,而这个工作流处理器就是WF Runtime.为了启动工作流,我们必须托管Runtime与工作流服务. 1.2.3.1 托管Windows Workflow ... 阅读全文
posted @ 2008-08-27 12:48 学-无-止-境 阅读(315) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之3 - 漫游工作流:Visual Studio 2005 扩展 1.2.2 Visual Studio 2005 扩展 Microsoft提供了一个Visual Studio 2005 的工作流扩展(Microsoft Visual Studio 2005 Extensions for Windows Workflow)其中包含用于构建工作流的可视化设计器. 活动排列在... 阅读全文
posted @ 2008-08-27 12:48 学-无-止-境 阅读(329) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之2 - 漫游工作流:活动与自定义活动 1.2 漫游工作流 Windows Workflow Foundation是.NET 3.0中新增的一部分,新的.NET 3.0还包括Windows Presentation Foundation(WPF)和Windows Communication Foundation(WCF)这两项新技术. 支持Windows Workflow (... 阅读全文
posted @ 2008-08-27 12:47 学-无-止-境 阅读(429) 评论(0) 推荐(0) 编辑
摘要:《WF编程》系列之1 - Hello,Workflow & 创建工作流解决方案 1. Hello,Workflow 什么是工作流?有一个简单的定义:工作流是完成特定任务所需的一系列步骤,决策和规则. 举一个现实生活中的例子,在饭店里,我们告诉服务员想要的菜,服务员记录然后交给厨师,厨师把做好的饭菜递给服务员,服务员再端给我们. 这个工作流的步骤是:我们(食客) > 服务员 >厨师 > 服务员 ... 阅读全文
posted @ 2008-08-27 12:45 学-无-止-境 阅读(418) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示