SOAP(以前称为“简单对象访问协议”)是用于在分散的分布式环境中交换信息的轻量级协议。SOAP 消息是从发送方到接收方的信息传输。多个 SOAP 消息可以组合起来执行请求/响应模式。
SOAP 与传输无关,但最常通过 HTTP 进行传递,以使用现有的因特网基础结构来运行。SOAP 通过定义用于路由消息的消息路径来启用绑定和被发现 Web Service 的使用。SOAP 用于对 Web Service 查询 UDDI。
Java™ API for XML Web Service (JAX-WS) 标准引入了支持 SOAP 1.1 和 SOAP 1.2 的能力。安装 WebSphere® Application
Server V7.0 及更高版本或 WebSphere Application
Server Liberty 概要文件之后,工作台支持 SOAP 1.1 和 SOAP 1.2。
SOAP 1.1
SOAP 1.1 是独立于协议的传输,可与各种协议组合使用。在用 WebSphere Application
Server 开发和实现的 Web Service 中,SOAP 会用在 HTTP、HTTP 扩展框架和 Java 消息服务 (JMS) 的组合中。SOAP 也独立于操作系统,不会捆绑到任何编程语言或组件技术。只要客户机可以发出 XML 消息,使用哪种技术来实现该客户机就无关紧要。同样,该服务可在任何语言中实现,只要该服务可以处理 SOAP 消息。另外,服务器和客户机端可以位于任何合适的平台上。
SOAP 是基于 XML 的协议,用于定义每一条消息的三个部分:
- 包络。包络定义用于描述消息的内容以及其处理方式的框架。SOAP 消息是一个包含零或多个头以及只包含一个主体的包络。包络是 XML 文档的顶级元素,用于为控制信息、消息的地址以及消息本身提供容器。头会传输任何控制信息,例如服务质量属性。主体包含消息标识及其参数。头和主体都是包络的子元素。
- 编码规则。编码规则集表示应用程序定义的数据类型的实例。编码规则定义一种序列化机制,它可用来交换应用程序定义的数据类型的实例。SOAP 根据 XSD 以及按照此模型定义的所有数据类型的编码规则,定义与编程语言无关的数据类型方案。SOAP 编码不符合 WS-I,因此建议将文字(它是非编码的)用于可互操作的 Web Service,并且文字必须符合 WS-I。
- 通信样式 通信可以遵循远程过程调用 (RPC) 或以消息为导向的(文档)格式。
SOAP 支持两种不同的通信样式:
- 远程过程调用 (RPC):RPC 是对用于返回结果的操作的调用。RPC 通常与 SOAP 编码配合使用,后者不符合 WS-I。
- 文档样式:文档样式也称为以文档为导向的样式或以消息为导向的样式。此样式提供了更深层的抽象,需要更多编程工作。
在分布式计算环境中,编码样式定义如何在特定协议格式之间转换应用程序中定义的数据值。转换过程称为序列化和反序列化。SOAP 1.1 规范定义 SOAP 编码样式:
- SOAP 编码:SOAP 编码样式使您能够从 SOAP 数据模型序列化/反序列化数据类型的值。此编码样式定义在 SOAP 1.1 标准中,并且不符合 WS-I。
WSDL 定义了“文字 XML”编码样式:
- 文字 XML:文字指的是应该将文档按原样读取的事实,或未编码。文档被序列化为 XMI,这意味着消息 XML 符合 WSDL 中的模式。当使用“文字”编码时,每个消息部件都引用具体的模式定义。文字编码符合 WS-I。
SOAP 1.2
SOAP 1.2 规范也是一个万维网联盟 (W3C) 推荐项,并且包括在此工作台中的工具遵循 SOAP 1.2 中概述的标准。
SOAP 1.2 规范包括三个部分和一些断言以及一个测试集合:
SOAP 1.2 更明确地定义了 SOAP 处理模型,该模型中移除了许多在缺少
Web Service 互操作性 (WS-I) 概要文件的情况下有时会导致互操作性问题的不确定性。SOAP 1.2 应可降低不同供应商之间
SOAP 1.2 实现发生互操作性问题的机率。
SOAP 1.2 规范中一些较重要的更改包括:
- 现在只要供应商遵从 SOAP 1.2 中定义的绑定框架,就能够正式定义 HTTP 协议以外的其他传输协议。虽然
HTTP 普遍存在,但它没有其他传输协议(如 TCP/IP 和 MQ 等等)可靠。
- SOAP 1.2 基于 XML 信息集(XML 信息集)。信息集提供了一种方法来使用 XSD 模式描述 XML 文档,但并不一定使用
XML 1.0 序列化来序列化该文档。SOAP 1.1 基于 XML 1.0 序列化。信息集将使得使用其他序列化格式(例如二进制协议格式)更容易。可以使用二进制协议来将消息压缩成某一可能不需要某些详细标记信息的压缩度更高的格式。
SOAP 的其他相关信息
有关 SOAP 1.1 与 1.2 之间差异的更详细的说明,请参阅:SOAP 版本差异