【WEB服务精髓学习笔记三】SOAP概述

本文主要基于《WEB服务精髓》第三章

SOAP简介

SOAP 是一种基于XML 的、用于在计算机之间交换信息的协议。SOAP 能应用于各种消息接发系统,并能通过各种传输协议进行传递,但是用的更多的还是HTTP协议。SOAP独立于平台和语言,简单并且可以扩展,允许用户绕过防火墙。

SOAP消息

SOAP的结构

SOAP消息的结构如下所示:
这里写图片描述

SOAP信封

SOAP XML 信封(SOAP XML Envelope)对在计算机间传递的数据如何封装定义了具体的规则。这包括应用特定的数据,如要调用的方法名、方法参数或返回值;还包括谁将处理封装内容,失败时如何编码错误消息等信息。
每个 SOAP消息都有一个根 Envelope元素。SOAP1.1和1.2的区分不是用传统的版本号来区别,而是用 XML 名称空间区分版本。版本必须在 Envelope 元素中引用,如:
这里写图片描述
SOAP 1.1 名称空间的 URI 是 http://schemas.xmlsoap.org/soap/envelope/,而SOAP 1.2 名称空间的 URI 是 http://www.w3.org/2001/09/soap-envelope(CSDN自动将IP弄作超链接,我也很无奈,两个名称空间是书上的)。如果 Envelope 出现在其他名称空间中,则被视为版本错误。

首部header

header有两个属性:actor和mustunderstand。
Actor: SOAP 协议将消息路径(message path)定义成一系列 SOAP 服务节点。每个中间节点都可以执行一定的处理,并将消息传送到路径中的下一个节点。通过设置 Actor 属性,客户端能指定 SOAP 首部的接收者。
MustUnderstand: 该属性表明 Header元素是可选的还是强制性的。如要设为真,则接收者一定要根据它定义的语义来理解和处理 Header的属性,或返回一个故障信息。
这里写图片描述

主体body

每一条SOAP消息都需要包含一个body。
在一条SOAP消息路径上可以有多个逻辑实体,即从客户端和服务器端相互发送的信息可以被一些中间方接受并进行相应的处理。
SOAP故障子元素:
这里写图片描述
这里写图片描述
SOAP故障的代码:
这里写图片描述
SOAP返回故障的一个例子:
这里写图片描述

SOAP编码

这里写图片描述
前者是最初的SOAP规范自己定义的数据编码规则,后者采用了XML Schema定义的内置类型。

简单类型

一个SOAP的双精度数据类型响应的例子:
这里写图片描述
SOAP规范为标明特定的XML元素的数据类型提供了几个选择。第一个选择是为每个元素指定一个 xsi:type属性;第二个选择是在一个外部 XML Schema,或者甚至在一个能直接阅读的文档中存放数据类型信息。SOAP 工具包会随着这种要求的实现方式的不同而不同,如 Apache SOAP 工具包自动为每个元素包含一个 xsi:type属性,但是 Microsoft SOAP 工具包会忽略 xsi:type属性,而假定一个外部 XML Schema 定义。

复合类型

SOAP支持两种复合类型的数据:数组和结构体。
创建一个数组时,必须将 xsi:type 指定为 Array。数组还必须包含一个arrayType 属性,指定所包含元素的数据类型和数组的维数需要该属性。譬如,属性arrayType=”xsd:double[10]”指定一个含10个双精度值的数组,而属性arrayType=”xsd:string[5,5]” 指定一个二维的字符串数组。
一个双精度值数组的 SOAP 响应的例子:
这里写图片描述
这里写图片描述
一个结构体的例子:
这里写图片描述

直接编码(直接将XML文档植入SOAP消息中)

在Apache SOAP 中,直接 XML 形式用名称空间 http://xml.apache.org/xml-soap/literalxml指定。
一个例子(它不是将产品编码为 SOAP 结构,而
是将数据编码成直接 XML 文档。):
这里写图片描述

SOAP消息模型

这里写图片描述
一般,SOAP消息中间方分为两种:

  1. 转发中间方:这一类型的中间方通过在所转发消息的SOAP消息头块中描述和构造语义和规则,从而实现消息处理。

  2. 活动中间方:这一类型的中间方利用一组功能为接收方结点修改外部绑定消息,从而提供更多的消息处理操作。

在SOAP消息交换路径中,借助于SOAP中间方,使得分布式处理模型在SOAP消息交换中得以实现。通过使用SOAP中间方,可以向SOAP应用程序中集成各种功能(如转发、过滤、事务、安全、日志记录、智能路由等)。

参考资料

《WEB服务精髓》
参考soap教程
参考博客
初入计算机,请大家多多指教嘛,真诚欢迎一起讨论,共同学习~~~持续更新中……

猜你喜欢

转载自blog.csdn.net/gongyi_yf/article/details/79679972