简单对象访问协议(SOAP)是一种轻量的、简单的、基于XML的协议,它被设计成在WEB上交换结构化的和固化的信息。SOAP可与现存的许多因特网协议和格式结合使用,包括超文本传输协议(HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用等大量的应用程序。简单对象访问协议SOAP(Simple Object Access Protocol)在基于网络的分布式应用系统中日益获得青睐。简单对象访问协议是一个为在分散的、分布的环境中交换信息的“轻量”协议。它定义了传递XML encoded数据时的统一方式及使用HTTP作为底层通信协议时执行远程调用(RPC)的方法。

中文名

简单对象访问协议

外文名

Simple Object Access Protocol

中文缩写

简象访协

外语缩写

SOAP

webService三要素

SOAP、WSDL(WebServicesDescriptionLanguage)、UDDI(UniversalDescriptionDiscovery andIntegration)之一,soap用来描述传递信息的格式,WSDL用来描述如何访问具体的接口,uddi用来管理,分发,查询webService。具体实现可以搜索Web Services简单实例;SOAP可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议(HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。SOAP使用基于XML的数据结构和超文本传输协议(HTTP)的组合定义了一个标准的方法来使用Internet上各种不同操作环境中的分布式对象。

相关定义

基于类对象的传输协议。

SOAP封装(envelop),它定义了一个框架,描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们;

SOAP编码规则(encoding rules),它定义了一种序列化机制,用于表示应用程序需要使用的数据类型的实例;

SOAP RPC表示(RPC representation),它定了一个协定,用于表示远程过程调用和应答;

SOAP绑定(binding),它定义了SOAP使用哪种协议交换信息。使用HTTP/TCP/UDP协议都可以。

简单对象访问协议

把SOAP绑定到HTTP提供了同时利用SOAP的样式和分散的灵活性的特点以及HTTP的丰富的特征库的优点。在HTTP上传送SOAP并不是说SOAP会覆盖现有的HTTP语义,而是HTTP上的SOAP语义会自然的映射到HTTP语义。在使用HTTP作为协议绑定的场合中,RPC请求映射到HTTP请求上,而RPC应答映射到HTTP应答。然而,在RPC上使用SOAP并不仅限于HTTP协议绑定。

历史

SOAP是“Simple Object Access Protocol”的缩写。

最新版本SOAP 1.2版在2003年6月24日成为W3C的推荐版本。

SOAP由Dave Winer,Don Box,Bob Atkinson,Mohsen Al-Ghosein于1998年设计,当时只作为一种对象访问协议。SOAP规范由万维网联盟的XML工作组维护。

四个部分

封装

它定义了一个框架,该框架描述了消息中的内容是什么,谁应当处理它以及它是可选的还是必须的。

简单对象访问协议

编码规则

它定义了一种序列化的机制,用于交换应用程序所定义的数据类型的实例。

RPC表示

它定义了用于表示远程过程调用和应答的协定。

绑定

定义了一种使用底层传输协议来完成在节点间交换SOAP封装的约定。

SOAP消息基本上是从发送端到接收端的单向传输,但它们常常结合起来执行类似于请求/应答的模式。所有的SOAP消息都使用XML编码。一条SOAP消息就是一个包含有一个必需的SOAP的封装包,一个可选的SOAP标头和一个必需的SOAP体块的XML文档。把SOAP绑定到HTTP提供了同时利用SOAP的样式和分散的灵活性的特点以及HTTP的丰富的特征库的优点。在HTTP上传送SOAP并不是说SOAP会覆盖现有的HTTP语义,而是HTTP上的SOAP语义会自然的映射到HTTP语义。在使用HTTP作为协议绑定的场合中,RPC请求映射到HTTP请求上,而RPC应答映射到HTTP应答。然而,在RPC上使用SOAP并不仅限于HTTP协议绑定。SOAP也可以绑定到TCP和UDP协议上。

协议结构

SOAP消息格式:

<SOAP-ENV:Envelope

各种属性>

<!--百度百科示例-->

<SOAP:HEADER>

</SOAP:HEADER>

<SOAP:Body>

</SOAP:Body>

</SOAP-ENV:Envelope>

主要在web服务中运用。

语法规则

构建模块

一条SOAP消息就是一个普通的XML文档,包含下列元素:

必需的Envelope元素,可把此XML文档标识为一条SOAP消息

可选的Header元素,包含头部信息

必需的Body元素,包含所有的调用和响应信息

可选的Fault元素,提供有关在处理此消息所发生错误的信息

简单对象访问协议

语法规则

语法规则这里是一些重要的语法规则:

SOAP消息必须用XML来编码

SOAP消息必须使用SOAPEnvelope命名空间

SOAP消息必须使用SOAPEncoding命名空间

SOAP消息不能包含DTD引用

SOAP消息不能包含XML处理指令

消息基本结构

<?xml

version="1.0"?>

<soap:Envelope

xmlns:soap="http://www.w3.org/2001/12/soap-envelope"

soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Header>

<!--百度百科示例-->

</soap:Header>

<soap:Body>

<!--百度百科示例-->

<soap:Fault>

<!--百度百科示例-->

</soap:Fault>

</soap:Body>

</soap:Envelope>

核心技术

SOAP采用了已经广泛使用的两个协议:HTTP和XML(标准通用标记语言下的一个子集)。HTTP用于实现SOAP的RPC风格的传输,而XML是它的编码模式。采用几行代码和一个XML解析器,HTTP服务器(MS的IIS或Apache)立刻成为SOAP的ORBS。SOAP通讯协议使用HTTP来发送XML格式的信息。HTTP与RPC的协议很相似,它简单、配置广泛,并且对防火墙比其它协议更容易发挥作用。HTTP请求一般由Web服务器软件(如IIS和Apache)来处理,但越来越多的应用服务器产品正在支持HTTP。XML作为一个更好的网络数据表达方式(NDR)。SOAP把XML的使用代码化为请求和响应参数编码模式,并用HTTP作传输。具体地讲,一个SOAP方法可以简单地看作遵循SOAP编码规则的HTTP请求和响应,一个SOAP终端则可以看作一个基于HTTP的URL,它用来识别方法调用的目标。像CORBA/IIOP一样,SOAP不需要具体的对象绑定到一个给定的终端,而是由具体实现程序来决定怎样把对象终端标识符映像到服务器端的对象。

简单对象访问协议

优点

可扩展的。SOAP无需中断已有的应用程序,SOAP客户端、服务器和协议自身都能发展。而且SOAP能极好地支持中间介质和层次化的体系结构。

简单的。客户端发送一个请求,调用相应的对象,然后服务器返回结果。这些消息是XML格式的,并且封装成符合HTTP协议的消息。因此,它符合任何路由器、防火墙或代理服务器的要求。

完全和厂商无关。SOAP可以相对于平台、操作系统、目标模型和编程语言独立实现。另外,传输和语言绑定以及数据编码的参数选择都是由具体的实现决定的。

与编程语言无关。SOAP可以使用任何语言来完成,只要客户端发送正确SOAP请求(也就是说,传递一个合适的参数给一个实际的远端服务器)。SOAP没有对象模型,应用程序可以捆绑在任何对象模型中。

与平台无关。SOAP可以在任何操作系统中无需改动正常运行。