Web服务复习要点(二)
SOAP简单对象访问协议
概述
SOAP解决的问题:为了解决在异构的基础设施上运行专有系统的问题,Web service需要依赖SOAP。
SOAP:是一个基于XML的通信协议,它在两个计算机之间交换消息,而无须考虑两个计算机的操作系统,编程环境或对象模型框架。
SOAP的主要应用是程序间的通信。
- SOAP方法是一个遵循SOAP编码规则的http请求和响应。
- SOAP端点是一个基于HTTP的URL,该URL标识了方法调用的目标对象。
连线协议与传输协议
SOAP是一个连线协议,规定了对消息如何结构化。
连线协议指定在不同的应用系统之间交换数据的形式或状态。
传输协议是一种在系统之间传输数据的方法。
SOAP的优缺点
优点:耦合性(客户端对于变化的适配程度,松 紧),互操作性,可伸缩性。
缺点:简洁性降低,效率降低
SOAP消息的结构
当前的SOAP规范描述了如何将关联的XML模式中定义的数据类型进行HTTP上的串行化。
结构:
1 | 包含一个<Envelope>元素,<Envelope>元素必须包含一个<Body>元素,并可包含也可以不包含一个<Header>元素。但是最多包含一个。<Header>元素中包含一些信息块,主要关于如何处理消息。 |
一条SOAP消息就是一个普通的XML文档,包含下列元素:
- Envelope,可把XML文档标识为一个SOAP消息
- Header,可选
- Body,必须,包含所有的调用和响应信息。
- Fault,可选,提供有关在处理消息中发生错误的信息。
1 |
|
Envelope是SOA片消息的根元素。
注意引入命名空间。”http://www.w3.org/2003/05/soap-envelope"
Header:
直接子元素成为“头块”,每一个头块都必须有自己的命名空间。SOAP在默认的命名空间中定义了三个属性:actor, mustUderstand以及encoingStyle。这三个属性,可定义容器如何对SOAP消息进行处理。
actor属性可被用于将Header元素寻址到一个特定的端点。
mustUnderstand属性可用于标识标题项对于要对其进行处理的接受者来说是强制的还是可选的。
1 | soap:mustUngersyand="0|1" |
SOAP消息传送的模块性
各个代码块的代码无关。
RPC类型的Web服务
RPC类型的Web服务显现为客户端应用的一个远程对象
主要围绕具体服务的接口
客户端将请求作为含有变量集的方法调用,返回的响应将包含返回值
RPC支持消息的自动串形化/逆串行化
文档(消息)类型的Web服务
可以使用SOAP来交换文档,这些文档可以包含任何类型的XML数据。
在SOAP体中发送没有编码的XML内容通常成为文档型SOAP
文档型的Web服务属于消息驱动
SOAP的通信方式可以是文档或者RPC方式之一
单向消息交换模式、请求/响应消息交换模式指的是消息的流向,与具体内容无关。
基于HTTP的SOAP
SOAP使用XML作为请求和响应参数的编码模式,并且使用HTTP作为传输协议来抵达互联网上的人格目的地,而无须任何额外的包裹或编码。
使用HTTP POST方法可将HTTP和SOAP请求/响应消息交换模式进行绑定。
XML+HTTP=SOAP
可能是HTTP POST或者HTTP GET
Content-Type:application/soap+xml
Content-Length
SOAP的主要优点
简单性:基于XML具有高度的结构化,并且很容易解析
可移植性:无须依赖底层平台,不需考虑字节顺序或计算机字长等问题。
与防火墙的相容性:POST机制具有广泛的可用性,可以穿过防火墙。
使用开放标准:使用XML开放标准来格式化数据
互操作性:建立在开放技术至上
被广泛接受:在消息通信领域,SOAP是最被接受的标准
适应变换:SOAP基础架构的变化通常不会影响到使用协议的应用。
SOAP的缺点
SOAP最初仅限于HTTP,采用了并不适合所有情况的请求/应答体系结构
SOAP是无状态的。
SOAP为基于值的串行化,而不支持基于引用的串行化。
小结
SOAP是分散式、分布式环境中的轻量级信息交换协议。
SOAP本质上是一个状态的,单向的消息交换方式。
SOAP定义一个完整的处理模型。
描述Web服务
服务描述语言WSDL
WSDL是一种使用XML编写的文档。这种文档可描述某个Web service。它可规定服务的位置,以及此服务提供的操作。用于描述Web服务的公共接口。
WSDL描述web服务的三个基本属性
- 服务做些什么:Web Service接口;服务所提供的操作。
- 如何访问服务:消息格式约定,数据格式以及访问服务操作的必要协议。
- 服务位于何处:访问地址;由特定协议决定的网络地址。
WSDL的本质
告诉服务的使用者如何将请求消息格式化,通过何种通信协议在何处访问web service
WSDL文档
WSDL文档是一个简单的XML文档,它包含一些列描述某个web service的定义。
元素|定义
-|-
portType|web service执行的操作
message|web service使用的消息
types|web service使用的数据类型
binding|web service使用的通信协议
WSDL文档结构
1 | <definitions> |
WSDL端口:
portType是最重要的WSDL元素。描述一个web service,可被执行的操作,以及相关的消息。可被比作传统编程语言的一个函数库。
WSDL消息:
message元素定义一个操作的数据元素。每个消息均由一个或多个部件组成。部件可以比作参数。
WSDL types:
types元素定义web service使用的数据类型。使用XML schema。
WSDL Bindings:
binding元素为每个端口定义通信协议细节。
WSDL规范事实上可以分成两部分:服务接口定义(抽象接口),服务实现定义(具体端点)。
WSDL的接口定义
服务客户端通过调用操作与Web服务进行交互,在Web服务接口中,可以讲相关的操作进行分组。
Web服务接口定义描述了消息、操作和端口类型,并且具体的描述保持了平台独立性和语言独立性。
WSDL的实现
服务实现部分包括元素:binding,port,service,并描述了服务提供者如何实现特定的服务接口
WSDL消息交换模式
WSDL接口支持四类操作,每一类操作都能有一个输入或输出。
WSDL操作对应于两类基本的消息接受和发送版本。
类型 | 定义 |
---|---|
单向 | 该操作能够接收消息,但不会返回响应,operation元素声明有一个input元素,没有output元素 |
请求/响应 | 该操作能够接收消息,并返回一个响应,operation有input和output |
通知 | 该操作能够发送消息,但不会等待响应,portType包含output没有input |
要求/响应 | 该操作能够发送请求,并将等待一个响应,portType有input和output |
5.3 略
小结
- 服务描述语言是一个基于XML的语言,它描述了和特定Web服务之间的交互机制,并且使用该语言可以约束服务提供者以及使用服务的所有请求者。
- Web服务描述语言是一个基于XML的规范模式,提供了一个标准的服务表示语言,可用于描述Web服务所暴露的公共接口细节。
- WSDL的服务实现部分描述了一个特定的服务提供者如何实现一个具体的服务接口。
- WSDL规定了服务的句法签名,但是对于非功能性服务方面没有进行任何规定。
Web服务的注册与发现
服务注册
通过在服务注册库中发布一个Web服务,其他的应用将能发现该服务,这需要两个同样重要的操作:Web服务的描述和注册。
电子商务的注册
- 基于文档的服务注册
- 基于元数据的服务注册
不同支持在于他们处理服务描述信息的方式不同。
基于文档的服务注册
在注册库中存储基于XML的服务文档,但是服务提供者也必须以服务元数据的形式提供每一个文档的描述信息。
基于元数据的服务注册
服务提供者提交包含服务信息的文档,而是获取文档所包含的信息,然后创建元数据,这些元数据从本质上反映了所提交文档的内容。
元数据按内部格式存储在服务注册库中
注册库不会管理这些文档,而是提供这些文档的链接。
UDDI:统一描述、发现和集成
为实现服务注册和发现,创建通用描述、发现和集成规范
UDDI的目的是供开发工具以及使用Web服务标准的应用适用。
UDDI提供一个全球的,平台独立的、开放的框架,使得企业更容易开展业务、发现合作伙伴以及与这些合作伙伴在互联网上进行互操作。
UDDI
UDDI是一个包含轻量级数据的注册库
UDDI业务注册提供的信息包含三个相关的组成部分
- 白夜:包括地址、联系方式以及其他的一些联系信息。
- 黄页:基于行业分类法对信息进行分类
- 绿叶:关于服务的业务能力和相关信息,包括对于Web服务规范的引用和指向各种基于文件和基于URL的发现机制的指针。
是按照标准化方式设计的,不受限于任何技术。
通用业务注册库UBR
UDDI用例模型
角色:
- 产业联盟、标准化组织(发布服务类型定义)
- UDDI注册库(构建和发布遵循服务类型定义的服务)
- 服务提供者
- 服务客户端
行为:
- 服务客户端(基于不同的标准发现服务类型定义和服务)UDDI注册库
- 服务客户端(获取服务类型定义细节)产业联盟、标准化组织、服务提供者
- 服务客户端(调用所发现的服务)服务提供者
p20图 p21
服务提供者信息
企业服务的合作伙伴或者潜在客户需要了解服务的位置信息以及服务提供者的相关信息
businessEntity元素和businessKey属性(具有唯一性的标识符,属性值是UUID)
Web服务描述信息
businessEntity实体可以依次包含一个或多个businessServices数据结构,其中每个businessService构成都是一个businessEntity的逻辑后代。
寻址与通知
Web服务和有状态的资源
一般而言,易失性存储的计算可以描述为一系列的快照,成为状态。
程序的状态指的是在相继的计算之间“记忆”信息的能力
交互涉及两类模式:有状态的和无状态的。
有状态的资源
Web服务领域,状态是一些信息片段,并且这些信息不包含在Web服务请求消息的内容中,但是Web服务若要恰当的处理请求则需要用到这些信息。
为了能够以标准的方式发现、查询这些有状态的资源,以及与这些有状态的资源进行互操作,需要定义Web服务协定
Web服务资源框架(WS-RF)
WS-RF是一个规范集,基于该规范集可使用Web服务建模有状态的资源。核心是Web服务与有状态的资源之间的关系。定义了Web服务如何保持有状态的信息。
Web服务资源框架主要涉及有状态的资源的创建,寻址,检查和生命周期管理。
WS-RF涉及6个Web服务规范,定义表示和管理状态的WS-Resource方法。
p9图
WS-RF和其他Web服务标准之间的关系
WS—RF提供了将状态表示为有状态的资源的方法,并可按照隐含的资源模式规范化Web服务和有状态的资源之间的关系。
隐含的资源模式是关于Web服务技术(如XML,WSD等)的一组约定。
有状态的资源与Web服务关联
当部署Web服务时,将有状态的资源与Web服务进行关联,则这种关联是静止的。
在交换消息时进行关联,这种关联称作动态关联
Web服务寻址
通常情况下,通过WSDL提供的服务端点信息调用Web服务(静态);还有更多的动态信息,这需要客户端或运行时系统在运行时统一标识服务。
WS-Addressing规范提供了标识和描述端点信息以及消息映射到SOAP消息头的方法。定义了如何通过消息头信息将消息传送到服务。
根据WS-Addressing标准,通常嵌入在通信传输头部的寻址和动作信息放置在SOAP信封中。
端点引用
端点引用提供了目标的地址,而不是目标的标识,并且端点引用是作为XML类型来定义的。
地址构成是一个URI,用于提供端点的逻辑地址,并且每个目标为那个端点交互需要三类信息:基地址、引用特性集,引用参数。
指定一个端点引用
使用EndpointReference可以进行消息交换,其中Refer嗯册Properties元素标识了和所有消息交换相关联的资源
Web服务资源
WS-Resource被定义为Web服务和有状态的资源的组合
表示了XML文档和具有Web服务PortType元素的类型之间的关联,并且可以按照隐含资源模式寻址和访问这种组合。
资源属性
可以使用消息交换来访问有状态的实体的状态,因此对于有状态的资源而言,定义消息交换是一个非常重要的事情。
在Web服务环境中,WS-Resource通过一组组件来表示状态,这组组件称作资源特性元素。
Web服务通知
在事件驱动的体系结构以及MOM中,最核心的功能就是发布和订阅处理。
对于SOA的实现,事件驱动的处理和通知引入了一个新的模式,通知模式,在通知模式中,提供信息的服务向一个或多个接受者发送单向消息。
P2P通知的基本术语
WS-BaseNotification规范定义来通知的消费者和生产者的标准接口,包括了标准的消息交换以及一些常规的运营需求。是一个基础规范,其他WS-Notification规范文档需要依赖这个基础规范。
环境是一个对事件作出反应的对象。
通知指的是将特定环境的信息传送到其他服务的单向消息。
订阅是一个表示通知消费者和通知生产者之间的关系的实体。
订阅者是一个充当服务请求者的实体。