SOAP协议
1. 简介
SOAP(Simple Object Accrss Protocol,简单对象访问协议)是一种简单的基于XML的协议。要传输的信息以SOAP消息为载体,所有的SOAP消息都使用XML形式编码,以XML格式封装,并绑定在HTTP协议上传递。
SOAP操作是面向文件的,它把XML文件作为输入输出消息的一部分。在SOAP消息对象框架中,每个XML文件都是一条消息的独立部分,而每条消息都是一个对象。如果SOAP消息中包括多个XML文件,那么它就存在多个消息部对象。每个消息部对象封装一个独立的消息部或者一个XML文件。
SOAP是Web Service的通信协议,是基于XML语言和XSD标准,其定义了一套编码规则,编码规则定义如何将数据表示为消息,以及怎样通过HTTP协议来传输SOAP消息,由四部分组成:
- SOAP信封(Envelope):定义了一个框架,框架描述了消息中的内容是什么,包括消息的内容、发送者、接收者、处理者以及如何处理消息。
- SOAP编码规则:定义了一种系列化机制,用于交换应用程序所定义的数据类型的实例。
- OAP RPC表示:定义了用于表示远程过程调用和应答协定。
- SOAP绑定:定义了一种使用底层传输协议来完成在节点间交换SOAP信封的约定。
2. 特性
- SOAP是一种轻量级通信协议
- 用于应用程序之间的通信
- 使用SOAP的应用使用HTTP协议通信
- 独立于平台
- 独立于编程语言
- 基于XML
- 很简单并可扩展
- 允许绕过防火墙
3. soap消息组成
一条SOAP消息就是一个普通的XML文档,文档包括下列元素:
- Envelope(信封)元素,必选,可把此XML文档标识为一条SOAP消息。
- Header(报头)元素,可选,包含头部信息(包含了使消息在到达最终目的地之前,能够被路由到一个或多个中间节点的信息)。
- Body(主体)元素,必选,包含所有的调用和响应信息。
- Fault元素,位于Body内,可选,提供有关处理此消息所发生错误的信息。
- Attachment(附件)元素,可选,可通过添加一个或多个附件扩展SOAP消息。
3.1 SOAP消息
假设用户要通过互联网在线查询火车票的票价‚在互联网上存在一个组件其中的 一个名为Getting-Price
的方法可完成这个功能,其接口为gettingprice。
3.1.1 SOAP请求
客户端的SOAP请求以HTTP头部构架和所需的XML格式被封装成HTTP包发送至服务器。
- 前四行是标准的HTTP消息格式,POST是HTTP的谓词 Host、Content-Type 和 Content-Length 都是 HTTP 消息格式的必要内容。Content-Type中的
text/xml
表示发送给服务器(或者可扫描应用程序头 部的防火墙)的XML消息的有效载荷 - Envelope和Body提供一套常规的有效载荷封装机制
-
<Getting Price>
包含一个<symbol>
元素用以获得所查询火车票的票价,比如说是T132。在SOAP规范中,要激活一个组件是由指定的URI(Uniform Resource Identifier)中的代码来决定如何激活该组件并调用相应的方法。
3.1.2 SOAP应答
当服务器识别SOAP请求中的SOAPMethodName后‚调用相应的具体过程并将结果 封装在SOAP应答中返回给客户端。
前三行仍是标准的HTTP消息格式,其中第一行表示对上次SOAP请求的应答。<Getting-PriceRe sponse>
包含了对查询的火车票的价格。
3.2 SOAP 封装
一个SOAP消息就是一个XML文档,它包括SOAP封装、SOAP头(可选)和SOAP体。
- SOAP封装是描述SOAP消息的XML文档中的顶层元素。
- SOAP头为尚未事先约定的分散的通信各方提供了向SOAP消息中增加相关要素(feature)的机制。同时定义了一些属性来标明这些要素(feature) 由谁来处理及是否可选;
- SOAP体是一个容器,包含了消息的最终接收者所需信息。SOAP为SOAP体定义了一个Fault元素用来报告错误信息。
3.2.1 SOAP封装
元素名是 Envelope
是SOAP消息中的必需元素。当它包含了名域声明、附加属性 或者附加子元素时,那么它们必须具备名域资格,附加子元素必须写在SOAP体元素之后。
3.2.2 SOAP头
元素名是 Header
它是一个可选元素。如果写明,则必须是SOAP封装元素的第一个直接子元素。SOAP头可包含许多头条目(header entry),它们都是SOAP头元素的直接子元素,并且都必须具备名域资格。在实际应用中,这些头条目所能完成的典型任务是做鉴定、事物管理和债务偿还等。
其编码必须遵守的规则有:
- 一个头条目必须能被识别‚包括名域空间URI和局域名称。所有头元 素的子元素都必须具备名域资格;
- SOAP的encodingStyle属性可用来表明头条目的编码方式;
- SOAP 的mustUnderstand和actor属性指出如何处理该条目及由谁来处理。
3.2.3 SOAP体
元素名是Body
,是SOAP消息中的必需元素而且是SOAP封装元素的直接子元素。 如果存在SOAP头元素,那么它必须紧跟其后,否则就是SOAP封装元素的第一个直接子元素。
SOAP体也可包括一些体条目,它们都是SOAP体元素的直接子元素。并且可具备名域资格。SOAP定义了 SOAPFault元素来指示错误信息。在实际应用中‚SOAP体元素多用来马歇尔RPC调用和错误报告等,其编码必须遵守的规则有:
-
一个体条目也必须能被识别‚包括名域空间URI和局域名称。所有体元素 的子元素都可以具备名域资格
-
SOAP的encodingStyle属性可用来表明体条目的编码方式。SOAP头和 体各自还可以包含自己的属性。
-
具体请参考协议规范的原文。
尽管SOAP的头元素和体元素被定义为 独立的元素,但它们实际上是相互关联的。当头条目和体条目都需要缺省的actor,并且SOAP的mustUnderstand属性值为1时,两者是等价的。
4. 调用过程
Web service一般就是用SOAP协议通过HTTP来调用它,其实他就是一个WSDL文档,客户都可以阅读WSDL文档来用这个Web service。客户根据WSDL描述文档,会生成一个SOAP请求消息。Web service都是放在Web服务器 (如IIS) 后面的,客户生成的SOAP请求会被嵌入在一个HTTP POST请求中,发送到Web服务器来。Web服务器再把这些请求转发给Web service请求处理器。请求处理器的作用在于,解析收到的SOAP请求,调用Web service,然后再生成相应的SOAP应答。Web服务器得到SOAP应答后,会再通过HTTP应答的方式把它送回到客户端。
SOAP简单的理解,就是这样的一个开放协议SOAP=RPC+HTTP+XML:采用HTTP作为底层通讯协议;RPC作为远程调用途径,XML作为数据传送的格式,允许服务提供者和服务客户经过防火墙在INTERNET进行通讯交互。
5. SOAP 协议在WINDOWS环境下的实现
用SOAP实现远程调用,就是在相同或不同平台之间完成客户端和服务器端的通信。即客户端发送SOAP请求服务器端接受请求,分析其中包含的信息‚调用相应的函数并将返回值封装成SOAP消息 发送给客户端最后客户端解析应答消息。下面描述SOAP协议在WINDOWS环境下的实现过程。
5.1 体系结构
用户程序可以通过SOAP实现远程调用。首先‚用户程序向一个名为SoapClient的对象发送消息请求服务器上某一名为operation的操作‚SoapClient处理该消息后向服务器发出SOAP请求。在服务器端,由一个名为SoapServer的对象接受请求调用相应的组件方法执行相应的操作。SoapServer获得操作结果后将其以SOAP应答的形式返回给客户端。最后客户端的SoapClient处理SOAP应答并将结果封装在消息中发送给用户程序。这样通过SoapClient和SoapServer的桥梁作用,客户端便可象调用本地函数一样调用服务器端的函数。
在实际应用中,当使用SoapClient和SoapServer进行SOAP的请求应答时,客户端和服务器端都必须 先通过一个名为WSDLReader的对象来获取WSDL文件中的SOAP消息结构‚以此保证通信的一致性。 下面分别详细描述客户端和服务器端的具体实现情况。
5.1.1 客户端
SoapClient在接受用户程序的 远程服务请求后,一方面通过WSDLReader从服务器上获取WSDL文件,为相应的服务操作产生一个名 为WSDLOperation的对象,WSDLOperation调用名为GetOperationParts的方法,获得操作的输入输出消息格式;另一方面SoapClient为服务操作的每个参数产生一个名为SoapMapper的对象并调入各对象操作所 需的参数值。
一个名为SoapSerializer的对象从相应的SoapMapper中建立SOAP请求消息并通过一个名 为SoapConnecter的对象发送给服务器,同时侦听服务器的应答。当服务器处理SOAP请求并将SOAP应 答返回给客户端后‚SoapReader将结果赋值给相应的SoapMapper‚同时也将结果返回给用户程序。
5.1.2 服务器端
当服务器端的SoapServer接收到客户端的SOAP请求后,一方面SoapReader将请求消息存放到一个 DOM结构中WSDLReader将WSDL文件存放到另一个DOM结构中,然后分析该请求并为其产生一个 WSDLOperation对象。WSDLOperation调用GetOperationParts方法获得操作的输入输出消息格式;另一方 面‚SoapServer为服务操作的每个参数产生SoapMapper对象,并调入各对象操作所需的参数值。SoapServer调用与该操作相应的组件方法后,将返回结果映射到相应的SoapMapper对象中,并用SoapSe rializer将返回值封装在SOAP应答消息中发送至客户端。文章来源:https://www.toymoban.com/news/detail-636754.html
文章来源地址https://www.toymoban.com/news/detail-636754.html
到了这里,关于SOAP协议的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!