Welcome

首页 / 软件开发 / WCF / WCF技术剖析之二十五:元数据(Metadata)架构体系全景展现[WS标准篇]

WCF技术剖析之二十五:元数据(Metadata)架构体系全景展现[WS标准篇]2012-11-22 博客园 蒋金楠元数据实际上是服务终结点的描述,终结点由地址(Address)、绑定(Binding)和契约(Contract)经典的ABC三要素组成。认真阅读过《WCF技术剖析(卷1)》的读者相对会对这三要素的本质有一个深刻的认识:地址决定了服务的位置并实现相应的寻址机制;契约描述了消息交换模式(Message Exchange Pattern: MEP)以及消息的结构(Schema);绑定则通过创建信道栈实现对消息的编码、传输和基于某些特殊的功能(比如实现事务、可靠传输以及基于消息的安全)对消息作出的处理。

服务的消费者通过获取服务端发布的元数据,并在此基础上重建终结点,才能取保请求:消息被发送到准确的目标地址;采用服务端期望的消息交换模式和并生成服务端能够识别的消息结构;使用相匹配的消息编码方式以确保服务端能够对接收到的消息进行正常解码;使用一致的传输协议以实现消息的正常传输;对消息进行与服务端一致性的处理以确保对事务、可靠传输、消息安全等协议的实现。

WCF是基于SOA构建的一个分布式通信平台,而SOA一个重要的特性就是实现跨平台的互操作。元数据是确保服务消费者正常调用目标服务(可能部署于异质平台),所以元数据本身需要采用一种开放的标准来表示。目前,元数据具有三种比较典型的表示方式:

XSD:通过XML Schema的形式描述组成消息的数据类型的XML结构;

WSDL:通过一个完整的Web Service Description Language文档对服务进行全面的描述,即包括抽象的功能,也包括具体的细节;

WS-Policy策略:通过WS-Policy规范以断言(Assertion)形式对服务能力和特性进行描述。

对跨平台互操作的实现不仅仅要求承载服务描述信息的元数据本身采用一种开放的标准或者规范来表示,甚至要求元数据交换(Metadata Exchange:MEX)同样按照厂商共同遵守的规范来进行。在WS-*规范体系中,WS-Metadata Exchange(WS-MEX)为元数据的交换进行了标准化的规范。WS-MetadataExchange(以下简称WS-MEX)规范了与终结点(这里是广义的Web服务终结点,与具体的技术无关)如何表示成一个WS-Transfer资源,并被嵌入到WS-Addressing终结点引用(Endpoint Reference)中,以及元数据如何被相应的Web服务终结点获取。简言之,WS-MEX是一个关于如何进行元数据交换的WS规范。WS-MEX和其他的WS-*规范一起,比如WSDL、WS-Addressing、WS-Transfer、WS—Policy等一起组成了一个完整的描述Web服务元数据和元数据交换的规范体系,在正式介绍WS-MEX之前,先来大概了解一些其他的这些辅助性WS-*规范。

一、WS-Policy

一个Web服务(这里指广义的、与技术平台无关的Web服务)除了实现通过服务契约定义的业务功能之外,为了实现一些额外的功能(比如安全、事务和可靠传输等),还需要具有一些与业务无关的行为(Behavior)和能力(Capability),我们可以将这些统称为Web服务的策略(Policy)。WS-Policy提供了一个基于XML的框架模型和语法用于描述Web服务的能力、要求和行为属性。

WS-Policy属于WS-*体系中的一个基础性规范,其规范本身不会被单独使用,而是服务于其他的WS规范(我们一般称这些为Domain Specific规范,比如WS-Transaction、WS-Reliable Messaging和WS-Security等)提供一种统一的策略描述。

W3C先后在2006年和2007年推出了两个版本的WS-Policy规范,即WS-Policy 1.2和WS-Policy 1.5。在这里,我们仅仅是正对最新的WS-Policy版本(1.5)来简单介绍一些一个完整的WS策略具有怎样的结构,对于希望深入了解WS-Policy的读者,可以通过后面的地址下载到W3C的官方文档:http://www.w3.org/TR/ws-policy/。

WS-Policy采用一个基于XML的策略表达式(Policy Expression)表示一个策略,在投入到对具体策略定义的介绍之前,我们不妨先来看看一个典型的策略表达式的定义。下面XML片断表示的策略表达式来自于WS-Security,这是一个基于如何实现基于消息安全的WS规范。它体现的含义是:对消息的主题部分采用签名还是加密。

 1: (01)<wsp:Policy
2: xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"
3: xmlns:wsp="http://www.w3.org/ns/ws-policy" >
4: (02) <wsp:ExactlyOne>
5: (03) <wsp:All>
6: (04)<sp:SignedParts>
7: (05) <sp:Body/>
8: (06)</sp:SignedParts>
9: (07) </wsp:All>
10: (08) <wsp:All>
11: (09)<sp:EncryptedParts>
12: (10) <sp:Body/>
13: (11)</sp:EncryptedParts>
14: (12) </wsp:All>
15: (13) </wsp:ExactlyOne>
16: (14) </wsp:Policy>
上面这个XML采用一种标准的形式(WS-Policy还定义了一种简写的策略表示方式)定义一个策略,接下来我们就此为基础介绍一个完整的策略表达式具有怎样的结构。

在一个基于Web服务的系统中,策略体现的对Web服务相关实体要求(Requirements)、能力(Capabilities)和特性(Characteristics)等行为属性的表示。WS-Policy通过断言(Assertion)的形式来表示这些单一的行为属性,然后通过一定的规则将相关的策略断言有机的组合在一起,以实现对整个Web服务目标实体的完整描述。

按照WS-Policy 1.5的规定,所有的策略元素均定义在http://www.w3.org/ns/ws-policy命名空间下,一个完整策略通过一个基于XML的策略表达式描述。1、

1、策略表达式(Policy Expression)

一个策略表达式是一个XML信息集(XML InfoSet),描述了一个完整的策略。策略表达式具有两个不同的表示形式:标准形式(Normal Form)和简写形式(Compact Form)。一个策略表达式是一个策略选择项(Policy Alternative)的集合。我们要求满足某个策略,意味着我们须要满足该集合的至少一个策略选择项。