16.1 WCF概述
WCF是Windows Communication Foundation的缩写,中文含义为Windows通信基础。WCF最开始由.NET Framework 3.0引入,与WPF和WF组成了三大开发类库。WCF的最终目标是通过进程或者不同的系统、通过本地网络或者通过Internet收发客户和服务之间的消息。
16.1.1 WCF简介
WCF是一个面向服务编程的分布式架构。它是.NET框架的一部分,因为WCF并不能脱离.NET框架而单独存在。因此,虽然WCF是微软为应对SOA解决方案的开发需要而专门推出的,但它并不是像Spring和Struts那样的框架,也不是像EJB那样的容器或者服务器。
WCF是微软对分布式编程技术的最大集成者,它将DCOM、.NET Remoting、Enterprise Service、Web Service、WSE以及MSMQ集成在一起,从而降低了学习分布式系统开发者的难度曲线,并统一了开发标准。
也就是说,在WCF框架下开发基于SOA的分布式系统变得容易了。微软将所有与此相关的技术要素都包含在内,掌握了WCF就相当于掌握了敲开SOA大门的钥匙。
例如,下面通过一个实例说明WCF的优势所在。假设要为一家汽车租赁公司开发一个新的应用程序,用于租车预约服务。该租车预约服务会被多种应用程序访问,包括呼叫中心,基于J2EE的租车预约服务以及合作伙伴的应用程序,如图16-1所示。
图16-1 汽车租赁公司应用程序分布图
呼叫中心运行在Windows平台下,是在.NET Framework下开发的应用程序,用户为公司员工。由于该汽车租赁公司兼并了另外一家租赁公司,该公司原有的汽车预约服务应用程序是J2EE应用程序,运行在非Windows操作系统下。呼叫中心和已有的汽车预约应用程序都运行在企业内部局域网环境下。合作伙伴的应用程序可能会运行在各种平台下,这些合作伙伴包括婚纱拍摄公司、司仪策划公司等,他们会通过Internet来访问汽车预约服务,实现对汽车的租用。
这样一个案例是一个典型的分布式应用系统。如果没有WCF,利用.NET现有的技术应该如何开发呢?
首先考虑呼叫中心,它和要开发的汽车预约服务一样,都是基于.NET Framework的应用程序。呼叫中心对于系统的性能要求较高,在这样的前提下,.NET Remoting是最佳的实现技术。它能够高性能地实现.NET与.NET之间的通信。
要实现与已有的J2EE汽车预约应用程序之间的通信,只有基于SOAP的Web Service可以实现此种目的,它保证了跨平台的通信;而合作伙伴由于是通过Internet来访问,利用ASP.NET Web Service,也是较为合理的选择,它保证了跨网络的通信。由于涉及网络之间的通信,还要充分考虑通信的安全性,利用WSE(Web Service Enhancements)可以为Web Service提供安全的保证。
一个好的系统除了要保证访问和管理的安全和高性能,同时还要保证系统的可依赖性。因此,事务处理是企业应用必须考虑的因素,对于汽车预约服务,同样如此。在.NET中,Enterprise Service(COM+)提供了对事务的支持,其中还包括分布式事务(Distributed Transactions)。不过对于Enterprise Service而言,它仅支持有限的几种通信协议。
如果还要考虑异步调用、脱机连接、断点连接等功能,还需要应用MSMQ(Microsoft Message Queuing)利用消息队列支持应用程序之间的消息传递。
如此看来,要建立一个好的汽车租赁预约服务系统,需要用到的.NET分布式技术包括:.NET Remoting、Web Service、COM+等5种技术,这既不利于开发者的开发,也加大了程序的维护难度和开发成本。正是基于这样的缺陷,WCF才会在.NET 3.0中作为全新的分布式开发技术被微软强势推出,它整合了上述介绍的分布式技术,成为理想的分布式开发解决方案。如表16-1所示列出了WCF与之前相关技术的比较。
表16-1 WCF与现有技术比较
从表16-1中来看,WCF完全可以看作是Web Service、.NET Remoting、Enterprise Service、WSE、MSMQ等技术的并集。因此,对于上述汽车预约服务系统的例子,利用WCF就可以解决包括安全、可依赖、互操作、跨平台通信等需求。开发者再不用去分别了解.NET Remoting和WSE等各种技术了。
注意
事实上WCF远非简单的并集这样简单,它是真正面向服务的产品,它已经改变了通常的开发模式。
16.1.2 WCF组成部分
软件设计的一个重要原则:软件组件必须针对特定的任务专门设计和优化。假如要做一个管理软件,想象一下,如果一个软件非常依赖于与外界通信,那么不能把管理软件与外界通信的逻辑考虑在管理系统内部。所以,必须把通信任务委托给不同的组件。用WCF术语来说,这个组件称为WCF服务。更通俗地讲,WFC服务就是负责与外界通信的软件。
一个WCF服务由下面三部分组成。
(1)Service Class:一个标记了ServiceContract属性的类,其中可以包含多个方法。该类除了标记一些WCF特有的属性外,与一般的类没有区别。
(2)Host:可以是应用程序、进程或者Windows服务等,它是WCF服务的运行环境。
(3)Endpoints:可以是一个,也可以是一组,它是WCF实现通信的核心要素。
如图16-2所示显示了这三部分在WCF服务中的位置。
图16-2 WCF组成部分
一个WCF服务必须能为不同的通信场景提供不同的访问点,这些访问点称为WCF端点,也就是上面所提到的EndPoint。每个端点都有一个绑定(Binding)、一个地址(Address)和一个合约(Contract),如图16-3所示。
图16-3 端点组成部分
(1)绑定:指定该端点如何与外界通信,也就是为端点指定通信协议,包括传输协议、编码协议和安全协议。
(2)地址:一个端点地址,如果通过端点与WCF通信,必须把通信指定到网络地址。
(3)合约:一个端点上合约指定通过该端点的用户能访问到WCF服务的什么操作。
提示
为了便于记忆EndPoint的这三个部分,可以将Address、Binding和Contract简称为“ABC”。