我开始应用微软新的WinFX技术时,该技术还处于beta版和CTP(Community Technology Preview,社区技术预览)版阶段。这些基础结构开始时称作WinFX(包含Windows Presentation、Windows Communication和Windows Workflow),在2006年11月它们作为.NET Framework 3.0的一部分正式发布。实际上,我在日常工作中开始学习并使用这3个基础结构也是从那时开始的。下面就来谈谈我的不平凡的学习过程。.
WPF(Windows Presentation Foundation)和WCF(Windows Communication Foundation)所具有的灵活性及其功能给我留下了深刻的印象,同时,WF(Windows Workflow Foundation)也有点莫名地吸引我。WF并不仅仅是实现用户界面的新方法,也不仅仅是在应用程序和服务之间通信的新方法,而是一种体现了开发应用程序的全新方式。它是可声明、可视化且无限灵活的,其倡导的模型可以清晰地将工作内容和工作时间分隔开来。这种分隔允许你改变工作流模型(工作时间),而不会影响到工作内容。可将业务逻辑实现为一组独立并且可测试的组件,它们能像构建块一样装配到工作流中。
工作流并不是新概念。但是当微软公司花费了数年开发工作流基础结构并免费提供给我们时,这便值得我们去关注了。相比于其他工作流框架,WF实际上是Windows应用程序的标准工作流框架。
工作流(特别是WF)让我很振奋,所以我编写了本书的第1版。我也很振奋于它为和我一样的应用程序开发人员提供的各种机会。直到今天我仍然十分振奋,特别是在.NET Framework 3.5发布之后。在这个版本中,微软公司为WF提供了更多的增强功能——尤其是对工作流服务的支持(工作流服务其实就是以工作流的方式实现的WCF服务)。
我衷心希望,你读过本书之后也能够使用WF来构建令人振奋的新一代实用的工作流应用程序。
本书读者
本书面向所有想要学习如何在自己的应用程序中使用WF的.NET开发人员。它不是.NET或C#语言的入门读物。想要更深刻地理解本书的示例,你需要良好的.NET 1.1知识(.NET 2.0更好)。本书所有的示例都采用C#编写,所以你需要通晓C#。
Visual Studio 2008已经内置了对WF的支持。我使用它来生成本书中的示例和图示,也推荐你采用它作为开发平台。在本书的示例代码中,我会使用一些省时的C# 3.0新特性,比如自动实现属性等。所以,如果你熟悉C# 3.0的新功能,将会对你理解这些示例非常有帮助。
本书内容
本书共分为19章,每一章都基于前一章的内容。这样组织材料是为了让你不需要为理解某些概念而跳着阅读。不过,由于每一章都基于前一章的知识点,我会假设你已经按顺序读完并理解了该章之前的所有内容。
下面是每一章的简短摘要。
第1章:WF快速入门
本章简单介绍了WF。在本章中,我将引领你开发第一个工作流(“Hello Workflow”),并向你介绍WF的一些基本概念,例如,如何向工作流传递参数以及如何在工作流中制定决策等。
第2章:基础结构概述
本章的目标是对WF进行全面而高层次的概述。本章不会教你如何使用具体的WF功能,但会让你了解WF的设计时和运行时功能。可以将本章看作是一张涵盖了本书剩余章节所有内容的路线图。
第3章:活动
活动是WF的构建块,用于构造完整的工作流。本章总结了WF内置的标准活动,而且还比较了两种将业务逻辑引入工作流的方法:CodeActivity和构建自定义活动。
第4章:承载工作流运行时
WF并不是独立的应用程序,而是允许你构建自己的工作流应用程序的框架。本章演示了在应用程序中如何承载工作流运行时,还介绍了一套自定义工作流管理器类,它们帮助你承载工作流运行时,而且在之后的章节中会大量使用这些辅助类。
第5章:流控制
. WF包含了丰富的标准活动,支持的特性包括简单的分支决策、While循环,以及并行执行和复制。这些流控制活动控制着工作流的执行顺序,这也是本章的主要内容。大多数活动都支持Boolean类型的条件,该条件既可以通过代码来指定,也可以设置为声明性规则条件。本章将对这两种类型的条件进行比较。
第6章:本地服务
WF的一些核心功能是采用可插拔的服务机制来实现的。这种机制允许你根据自己的需要去实现这些服务。WF还提供了本地服务,你可以基于任何目的来实现这些服务。在工作流实例和宿主应用程序之间通信就是本地服务的一个常见用途。本章的重点是实现和使用自定义的本地服务。
第7章:事件驱动活动
本章的主要内容是事件驱动活动,事件驱动活动允许工作流等待外部事件的到达。第6章演示了如何实现本地服务和从工作流实例中调用这些服务。本章则演示如何从这些本地服务中触发事件并由工作流来处理这些事件,另外还将讨论自定义事件驱动活动的开发以及如何使用工作流队列进行通信。
第8章:工作流持久性
工作流持久性允许自动保存正在运行中的工作流实例的状态,并在将来重新加载它们。持久性对长时间运行的工作流来说尤为重要。在使用持久性服务时,你可以从内存中卸载空闲和等待外部事件的工作流。
第9章:状态机工作流
WF支持两种主要的工作流类型:顺序和状态机。到现在为止,你在本书中接触到的所有工作流都是顺序工作流,它们经常用来与系统交互。如果在设计时就知道准确的任务执行顺序,那么采用顺序工作流最合适。本章主要关注状态机工作流,经设计它可以轻松地响应外部事件。在解决有人类参与交互的工作流问题时,状态机工作流尤其有用,因为在这种情况下,准确的任务执行顺序往往不能在设计时决定。
第10章:事务和补偿
本章的目标是演示两种用来控制由工作流执行的工作的完整性和一致性的方法。事务允许将多个活动排列到一个工作逻辑单元中执行。当启用事务时,所有的工作只能被全部提交或者全部回滚,而不存在部分更新的问题。另一方面,补偿则是撤销已经完成的工作的过程。如果当某个活动成功完成之后,工作流才决定刚才的工作必须撤销的话,就需要进行补偿。..
第11章:工作流规则
WF包含通用的规则引擎,它带来声明业务逻辑的另一种方法。作为简单语句或相关的数据断言来使用规则是最好的思路(相对于使用程序指令)。单独的规则组成了规则集,并且可以通过WF内置的规则引擎进行计算。每个规则都允许定义一些动作,并根据规则的结果(true或者false)执行相应的动作。
第12章:异常和错误处理
异常处理对任何应用程序来说都至关重要,WF提供了一种机制来允许声明性地处理异常。本章的目的是说明各种在工作流模型中处理异常的方法。本章的内容还包括取消处理程序;当执行中的活动被取消时,可以使用取消处理程序来执行一组活动。
第13章:高级自定义活动
本章提供了关于自定义活动开发的高级信息,探索了通用的组合活动以及长时间运行的自定义活动的开发。
第14章:动态工作流更新
大多数情况下,你会静态地定义工作流,然后在运行时创建它的实例。WF还提供了动态更新执行中的工作流的功能,从而改变工作流的内部结构。本章演示了如何从宿主应用程序和执行中的工作流内部动态更新工作流。
第15章:工作流跟踪
WF提供了跟踪框架来跟踪工作流的执行过程。跟踪框架支持可插拔的跟踪服务,可以根据自己的需求来实现这种服务。跟踪框架基于跟踪配置,而跟踪配置又允许自定义每一种工作流被跟踪的数量和数据类型。本章的重点是使用标准的跟踪服务和开发自定义跟踪服务。
第16章:Web服务和ASP.NET
WF允许在工作流内部声明性地访问Web服务。也可以将工作流作为Web服务公开给任何Web服务客户端。本章会通过在ASP.NET Web Form应用程序中使用WF来演示这些主题。
第17章:工作流服务和WCF集成
本章的重点是.NET Framework 3.5中新增的WCF与WF的集成。这种集成的主要示例就是能够承载以工作流的方式实现的WCF服务。这就是工作流服务。从.NET 3.5开始,WF还允许在工作流中直接调用WCF服务。
第18章:工作流序列化和标记
本章的目的是演示如何使用工作流标记和序列化。每个工作流定义都可以用几种方式来声明和表示,其中就包括标记。标记用简单的XML格式声明了工作流,该格式不需要编译就可以直接被工作流运行时引擎解析并执行。使用标记的好处是可以非常容易地脱离Visual Studio来修改工作流定义,因为它不需要编译。
第19章:承载工作流设计器
第18章介绍了工作流序列化和标记,本章则演示如何创建自己的工作流设计器。WF包含了一些类来在应用程序中承载工作流设计器。本章演示了一个承载工作流设计器的应用程序,它允许定义和修改仅以标记表示的工作流。
本书要求
WF最初是.NET 3.0的一部分,开发环境则是通过插件的形式添加到Visual Studio 2005中。现在Visual Studio 2008已经内置了对WF的支持,而且.NET 3.5还包含了一些新的WF功能,例如支持工作流服务。
在运行本书提供的示例之前,需要安装一些软件。至少需要:
Visual Studio 2008 专业版、标准版或Team System版(Express版不支持WF开发);
.NET 3.5运行时(与Visual Studio 2008同时安装)。
注意上述软件支持的操作系统。通常来说,可以使用Windows XP Services Pack 2及之后的操作系统。
Visual Studio 2008和.NET 3.5的组合版允许使用WF的所有最新功能和本书的全部示例,而且其安装也很简单。
当然,也可以继续使用Visual Studio 2005和.NET 3.0来进行WF开发。但如果这样做的话,会被限制只能使用WF最初版本的功能。请查阅第1章以了解使用Visual Studio 2005需要安装的软件明细。
Microsoft .NET Framework开发中心(http://msdn2.microsoft.com/en-us/netframework/default.aspx)是一个不错的起点,在这个站点可以找到需要的任何文件。
本书源代码
我发现学习并掌握一门新技术的最佳途径就是动手练习示例。基于这个原因,本书包含了许多示例源代码。面对没有在书中印出所有源代码的技术图书,我不止一次地感到懊恼。尽管代码可以通过下载的方式得到,但阅读的时候就会需要一台电脑在手边。这要是在海滩上就无能为力了。因此,我认为有必要将实际构建和执行示例所需的代码全部展现出来。
当你准备运行这些示例代码时,不必自己输入,可以访问Apress网站(http://www.apress.com),然后在Source Code/Download栏目中下载示例代码;本书的所有源代码都可以在这里下载 。我将所有可下载的源代码归类到每一章单独的文件夹中,并且每一章都有一个Visual Studio解决方案。唯一的例外是一个共享项目,本书的许多章节都引用了它。我建议你最好也像本书的示例一样按章节分离你的代码。
与作者联系
如果你对本书或者WF有任何问题,都可以发送电子邮件到workflow@bukovics.com来告诉我。为了避免邮件被垃圾邮件过滤器屏蔽,请确保邮件主题中包含ProWF字样。...