在本书阐述到此时,你已经知道了WCF就是关于服务定义,服务创建和服务安全的。服务契约中有规范化描述的定义的很好的边界,但是从服务外面看,内部工作是完全不透明的。WCF 描述了很少的一部分服务实现;它简单地提供了接口来可信赖地并安全地与客户端交换消息。
Windows 工作流基础(WF)是WCF的补充技术。它就是关于一个多步骤过程中定义活动和执行活动的。WF可以将顺序执行或者事件驱动的自然事物用工作流建模。WF运行时通过分支,循环,分叉以及加入执行路径来执行活动。工作流运行时间可以很短或者很长。它们可以实现一个单独的事物或者与很多其他部分合作。WF不指定工作流的接口,这让它在很多应用程序中有用。
提示 对.NET 3.5来说这是新内容 WCF 和WF与.NET 3.0 一起发布。本章描述的集成,是.NET 3.5 和Visual Studio 2008 中新增的。 |
将WCF和WF 连接起来使用可以提供一个鲁棒性的平台来定义多个步骤的处理并在一个安全的可信赖的方式暴露它们。有一个内建的激活模型以便于工作流可以在一条消息被接收以后的反馈中开启。也有一个内建的持久模型以便于一个运行着的工作流可以在活动之间保存。分发器支持允许多个工作流实例在进入消息分发到合适的运行实例后一起执行。
重要: 为了完全理解这一章的内容,你应该对WF有一个很好的理解。这不是WF主题的一个指南。确切的说,它关注使用Visual Studio 和 .NET 3.5 集成WCF 和 WF 的部分。一个最精彩的WF书籍是Windows 工作流基础本质(Addison-Wesley; ISBN 0-321-39983-8),由Drhrma Shukla 和 Bob Schmidt 写的。额外的,因为WCF与WF集成严重依赖绑定和行为,你应该确定你已经读了本书的第四章”绑定”和第五章”行为”。
集成点
有两种方式来描述WCF和WF集成。从WCF方面看,WF允许你”像工作流那样实现一个服务”。从WF的观点看,WCF允许你”用服务启动工作流”。这两个都在说明同一件事情: 那就是,通过将WCF和WF连接起来使用,你通过一个基于标准的接口建模并实现逻辑。你的逻辑可以与很多标准兼容,比如SOAP, JSON或者X.509,并可以被IIS, WAS, Windows 服务或者任何其他WCF支持的寄宿环境寄宿。额外的,Visual Studio 中的跟踪,诊断和单元测试工具也可用在WCF和WF中。
WF通过利用WCF的扩展性来与其集成。所以尽管WF了解WCF,WCF却不知道WF。在.NET 3.5 中的集成通过WF深入地与WCF扩展点集成实现的。在.NET 3.5 中,WF更新了它的Visual Studio中的虚拟建模工具并添加扩展WCF功能的运行时支持。
WCF与WF的集成需要三个元素。首先,你需要一个方式来把服务交互模型化。WF擅长将一个工作流定义成一系列活动,所以所有需要做的就是需要一个扩展活动到交互服务的方式。使用WF,你可以使用WF来在服务间为交互过程建模。其次,为了将一个工作流按照一个服务暴露出来,你需要开启一个激活架构宿主。这必须支持事件驱动模型,事务和一致性,以便于工作流可以在系统重启时保存下来。第三,你需要支持客户端和服务端之间的关联,以便于客户端可以在服务端有一千个在运行时仍然能找到正确的服务实例并与之通信。
.NET 3.5 内建的集成和Visual Studio 支持这些场景中的每一个。每个主题都会在这里简要介绍并在这一章详细描述。
发送和接收活动被添加到WF设计器中。
WorkflowServiceHost类包裹WCF宿主类。
新的绑定和行为添加上下文信息到信道中来支持关联以及长运行工作流。
发送活动用来向一个WCF服务终结点发送一条消息。在设计阶段,WF设计器在WF生成的代理中映射入站和出站消息到WF变量上。在运行时WF使用代理与服务终结点通信。接收活动正好与发送活动相反。不是作为一个已有服务的客户端,接收活动作为服务本身暴露工作流。在设计阶段,WF设计器中来确定工作流的一个服务终结点和操作契约,包括它接收的和返回的消息。在运行时,当终结点接收一条消息时,或者新生成一个工作流服务或者消息被转发给一个已经存在且正在运行的工作流。
WorkflowServiceHost,正如名字所提示的,继承自WCF的ServiceHost 类,实际上是WF-WCF集成的冰山一角。它使用一系列自定义行为和绑定来实现与相关实例管理的WF特殊的工作。它也提供在服务宿主访问WF运行时以便于在一个无状态的WCF服务内一个持续的提供者可以开启长运行过程。
正如在第五章讨论的,WCF行为是WCF架构中非常灵活的扩展点。WCF使用服务和操作行为来操作消息和实例,如图片11.1显示。
图片11.1 WF行为