一. WCF体系框架
WCF是windows 系统下分布式通信技术的整合;WCF的体系基本包含了4个方面,分别为契约、服务运行时、消息和寄宿。
1 契约(能干什么)
从SOA的概念上来看,契约属于一个服务公开接口的一部分。一个服务的契约,定义了服务端公开的服务方法、使用的传输协议、可访问的地址、传输的消息格式等内容。
基本上,契约的定义描述了该服务的功能和作用,它告诉SOA系统中的其它节点这个服务是“干什么”的。
2 服务运行时(怎么干)
服务运行时定义了服务在运行时的具体行为。如果说契约描述了服务是“干什么”的,那么服务运行时就在一定程度上描述了服务是“怎么干”的。
3 消息
消息方面包含了消息的传输方式、消息的编码与解码。消息方面的内容基本属于服务边界以内的具体实现。具体的传递时限,必须符合在契约中定义的绑定协议。
4 激活和宿主(在哪干)
激活和宿主属于WCF程序的部署方式。一个WCF服务需要在一个可运行的程序中寄宿,我们可以把宿主理解为WCF运行的容器。常用的寄宿方式包括自寄宿、IIS寄宿、Windows激活服务、Windows服务、Com+组件等。根据SOA的原则,激活和宿主类型的变化不会影响服务本身的特性和外部对该服务的访问,而WCF在这一方面也确实做的非常出色。
二. WCF基础概念介绍
WCF框架中包含了大量的基础概念,本小节将以简短的篇幅带领大家浏览这些概念,使大家能够对WCF的基本概念有所了解。
1. 地址(Address)
在WCF框架中,每个服务都具有唯一的地址。在SOA系统中,其它服务和客户端通过服务的地址来对服务进行访问。一个服务的地址由一个统一资源标示符(URI)来表示。下面是几个地址示例:
http://localhost /Service
net.tcp://dc3web1:9023/MyService
net.msmq://localhost/MyMsMqService
实际上地址的形式不止这些,它们的构成形式如下所示:
http://[Hostname]:[Port]/[ServiceAddress]
https://[Hostname]:[Port]/[ServiceAddress]
net.tcp://[Hostname]:[Port]/[ServiceAddress]
net.pipe://[Hostname]:[Port]/[ServiceAddress]
net.msmq://[Hostname]/public(private)/[QueueName]
msmq.formatname://{msmq format name}
2. 绑定(Binging)
绑定定义了服务与外部通信的方式。它由一组称为绑定元素的元素而构成,这些元素组合在一起形成通信基础结构。一个绑定可以包含以下内容。
(1). 通信所使用的协议,如HTTP、TCP、P2P等。
(2). 消息编码方式,如纯文本、二进制编码、MTOM等。
(3). 消息安全保障策略。
(4). 通信堆栈的其它任何要素。
3. 契约(Contract)
在WCF中一共包含了4种契约,分别是服务契约、数据契约、错误契约和消息契约。
(1). 服务契约[ServiceContract]
服务契约将多个相关的操作联系在一起,组成单个功能单元。
(2). 数据契约[DataContract]
数据类型的说明称为数据契约。服务使用的数据类型必须在元数据中进行描述,以使其它各方面可以与该服务进行交互操作。
(3). 错误契约[FaultContract]
错误类型的说明称为错误契约。
(4). 消息契约[MessageContract]
消息契约描述消息的格式。
5. 终节点(EndPoint)
终结点是用来发送或接收消息(或同时执行这两种操作)的构造。一个终节点由三个要素组成,分别是笔者已经介绍了的:地址、绑定和契约。以SOA的思想来看,一个终节点就相当于服务的公共接口。
6. 元数据
服务的元数据描述服务的特征,外部实体需要了解这些特征以便与该服务进行通信。服务所公开的元数据包括XML架构文档(用于定义服务的数据协定)和WSDL文档(用于描述服务的方法)。启用元数据后,WCF通过检查服务及其终节点自动生成服务的元数据。
在WCF的行为章节中,笔者将介绍两种WCF的元数据发布方式。
7. 宿主
服务必须承载于某个进程中。宿主是控制服务的生存期的应用程序。
2种常见的寄宿方式:
1)一种是为一组WCF服务创建一个托管的应用程序,通过手工启动程序的方式对服务进行寄宿,所有的托管的应用程序均可作为WCF服务的宿主,比如 Console应用、Windows Forms应用和ASP.NET应用等,我们把这种方式的服务寄宿方式称为自我寄宿(Self Hosting)。
2)另一种则是通过操作系统现有的进程激活方式为WCF服务提过宿主,Windows下的进程激活手段包括IIS、Windows Service或者WAS(Windows Process Activation Service)等
无论采用哪种寄宿方式,在为某个服务创建 ServiceHost的过程中,WCF框架内部会执行一系列的操作,其中最重要的步骤就是为服务创建服务描述(Service Description)
。