SOAP v1.2为在一个松散的、分布的环境中使用XML对等地交换结构化的和类型化的信息提供了一个简单且轻量级的机制。SOAP本身并不定义任何应用语义,如编程模型或特定语义实现,它只是定义了一种简单的机制,通过一个模块化的包装模型和对模块中特定格式编码的数据的重编码机制来表示应用语义。SOAP的这项能力使得它可被很多类型的系统用于从消息系统到RPC(Remote Procedure Call)的延伸。
SOAP由四部分组成:
-
SOAP envelop (SOAP信封,参阅 section 4),它构造定义了一个整体的表示框架,可用于表示在消息(message)中的是什么,谁应当处理它,以及这是可选的 还是强制的。
-
SOAP encoding rules (SOAP编码规则,参阅 section 5),定义了一个编序机制用于交换应用程序定义的数据类型的实例。
-
SOAP RPC representation (SOAP RPC表示,参阅 section 7),定义了一个用于表示远端过程调用和响应的约定。
-
SOAP binding (SOAP绑定,参阅 section 6) 定义了一个使用底层传输协议来完成在结点间交换SOAP信封的约定。
为了简化本规范,这四部分在功能上是正交的。特别的,信封和编码规则是被定义在不同的命名空间(namespace)中,这样有利于通过模块化获得简明性。
本规范还定义了两种SOAP绑定(binding),用于描述SOAP消息(message)如何通过带或不带HTTP扩展框架[6](HTTP Extension Framework)的HTTP[5]消息(message)进行传输。
SOAP的主要设计目标是简明性和可扩展性。这就意味着有一些传统消息系统或分布式对象系统中的特性将不包含在SOAP的核心规范中。这些特性包括:
-
分布式垃圾收集 (distributed garbage collection);
-
批量消息传输/处理 (boxcarring or batching of messages);
-
对象引用 (objects-by-reference, 需要分布式垃圾收集的支持);
-
对象激活 (activation, 需要对象引用的支持)。
本文中的关键词“MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, “OPTIONAL”的语义应当参阅RFC-2119[2]。在本中文版规范中被翻译成:“必须”、“必须不”,“需要的”,“将”,“将不”,“应该”,“应该不”,“被推荐的”,“可以”,“可选的”。
本文中使用的命名空间前缀“env”和“enc”等关联的SOAP命名空间分别位于以下位置:"http://www.w3.org/2001/06/soap-envelope" 和"http://www.w3.org/2001/06/soap-encoding"。
在本文的全部内容中,命名空间前缀"xs"和"xsi"总假定是与"http://www.w3.org/2001/XMLSchema" 和"http://www.w3.org/2001/XMLSchema-instance"相关联的,这是由XML Schemas规范[10,11]所定义的。
值得注意的是其他的对命名空间前缀的使用都是比较随意的而并没有显著语义的约束的。
若命名空间的URI使用"http://example.org/..."或"http://example.com/..."的形式,表明这是一些应用依赖或上下文依赖的URI[4]。
本规范使用扩充BNF(Backus-Naur Form)作为构造语言,可参阅RFC-2612 [5]。
编辑的注解将使用黄色背景标识(也许无法在所有的媒介上显示),并使用前缀"Ednote"。
第一个例子展示了一个使用SOAP表示的简单的通知消息。该消息包含了一个消息头"alertcontrol"和消息体"alert",这两部分都是由应用程序定义的,而而并不是由SOAP定义的。消息头包含了两个参数"priority"和"expires",用于消息传输中介和消息接受者对消息的处理。而消息体中则包含是实际传送的消息。
<env:Envelope xmlns:env="http://www.w3.org/2001/06/soap-envelope"> <env:Header> <n:alertcontrol xmlns:n="http://example.org/alertcontrol"> <n:priority>1</n:priority> <n:expires>2001-06-22T14:00:00-05:00</n:expires> </n:alertcontrol> </env:Header> <env:Body> <m:alert xmlns:m="http://example.org/alert"> <m:msg>Pick up Mary at school at 2pm</m:msg> </m:alert> </env:Body></env:Envelope>
Sample SOAP Message containing a header block and a body block
SOAP消息能够与不同的底层协议进行绑定,同时可以在很多种消息传输模式中使用。下面的例子则展示了SOAP是如何在HTTP的连接中使用的,其中充分使用了HTTP提供的请求/相应机制(参阅 section 6)。
Example 1和Example 2展示了一个SOAP/HTTP请求的例子和一个SOAP/HTTP响应的例子。SOAP/HTTP请求包含了一个获取最后交易价格(GetLastTradePrice)的信息块,其中包含了一个简单的参数,指明需要报价的股票代号。同样,与先前的例子相似,GetLastTradePrice这个XML元素也并不是由SOAP自身定义的。该请求的服务响应也包含了一个简单的参数,股票的价格。SOAP信封元素是表示SOAP消息的XML文档的顶级元素。XML命名空间则用来消除SOAP标识符与应用定义的标识符之间可能存在的歧义。
POST /StockQuote HTTP/1.1Host: www.stockquoteserver.comContent-Type: text/xml; charset="utf-8"Content-Length: nnnnSOAPAction: "http://example.org/2001/06/quotes"<env:Envelope xmlns:env="http://www.w3.org/2001/06/soap-envelope" > <env:Body> <m:GetLastTradePrice env:encodingStyle="http://www.w3.org/2001/06/soap-encoding" xmlns:m="http://example.org/2001/06/quotes"> <symbol>DIS</symbol> </m:GetLastTradePrice> </env:Body></env:Envelope>
Sample SOAP Message embedded in an HTTP Request
Example 2展示了StockQuote服务响应由Example 1描述的请求消息而返回的SOAP消息。
HTTP/1.1 200 OKContent-Type: text/xml; charset="utf-8"Content-Length: nnnn<env:Envelope xmlns:env="http://www.w3.org/2001/06/soap-envelope" > <env:Body> <m:GetLastTradePriceResponse env:encodingStyle="http://www.w3.org/2001/06/soap-encoding" xmlns:m="http://example.org/2001/06/quotes"> <Price>34.5</Price> </m:GetLastTradePriceResponse> </env:Body></env:Envelope>
Sample SOAP Message embedded in an HTTP Response
在Appendix A中提供了更多的例子。
SOAP
关于SOAP消息的格式和处理规则、为沿着SOAP消息路径交换信息而需要的不同应用程序之间生成和接收SOAP消息的交互过程的简单控制机制等的一整套规范和约定。
SOAP绑定
为传输的需要而将SOAP消息在另一个底层协议之上或之内传输的一整套规范和规则。典型的SOAP绑定包括在HTTP消息中传送SOAP消息或在TCP之上传送SOAP消息等。
SOAP结点
SOAP结点根据SOAP定义的整套规范来处理SOAP消息。SOAP结点有责任遵守SOAP消息交换的规则以及提供通过依赖底层协议的SOAP绑定来访问的服务。任何不符合SOAP约定的情况都将导致SOAP结点产生一个SOAP错误(可参阅SOAP接受者和SOAP发送者)。
SOAP消息
SOAP消息(message)是在对等SOAP结点(SOAP nodes)间通讯的基本单位。
SOAP信封
SOAP信封(envelope)是SOAP规范中定义的SOAP消息(SOAP message)在句法上的最外层结构。在句法上,它包含了所有其他的元素。
SOAP条目
SOAP条目是一个句法上的结构,它用于包含一个逻辑上的单一元素,这一元素是需要被SOAP结点处理的。一个SOAP条目是由该条目最外层元素的完整修饰名所标识的,这个完整修饰名是由一个局部名和一个命名空间URI组成的。封装在SOAP header中的SOAP条目成为Header条目,而封装在SOAP body中的SOAP条目为Body条目。
SOAP header
能够被SOAP消息路径中任意的SOAP接受者处理的一组SOAP条目(0个或多个)。
SOAP body
能够被SOAP消息路径中的最终SOAP接受者处理的一组SOAP条目(0个或多个)。
SOAP fault
SOAP结点产生的用于包含错误信息的特殊的SOAP条目。
以下的图表演示了一个SOAP消息是如何组成的。
Figure 1: Encapsulation model illustrating the parts of a SOAP message
SOAP发送者
SOAP发送者是发出SOAP消息的SOAP结点。
SOAP接收者
SOAP接收者是接受SOAP消息的SOAP结点。
SOAP消息路径
为传送一个简单的SOAP消息而要经过的一组SOAP发送者和SOAP接受者。其中包含了初始SOAP发送者、零个或多个SOAP中介以及最终SOAP接受者。
初始SOAP发送者
SOAP消息的最初产生者,同时也是SOAP消息路径的第一个结点。
SOAP中介
SOAP中介即是SOAP接收者也是SOAP发送者,是SOAP消息可到达的某一个应用程序。当SOAP消息沿着SOAP消息路径传输时,SOAP中介将处理一组确定的SOAP条目,然后它将消息转发给消息路径的下一个SOAP结点,直至传送到最终SOAP接收者。
最终SOAP接收者
由初始SOAP发送者指定的通过SOAP消息路径传送SOAP消息的最终SOAP接收者。如果在SOAP消息路径中有SOAP结点产生了SOAP错误,那么SOAP消息将不会到达最终接收者。
SOAP数据模型
一组抽象的构造约定,用于描述通用的数据类型和数据中的链接关系。
SOAP数据编码
在SOAP消息中使用一个或多个SOAP条目,按照SOAP数据模型完成句法上的数据表示。
分享到:
相关推荐
SOAP 1.2是其一个重要版本,由W3C(World Wide Web Consortium)发布,旨在提供一种简单且轻量级的通信机制。这个版本的SOAP在2001年7月9日被制定为W3C的工作草案,并在后续进行了多次修订和完善。 SOAP 1.2协议由...
SOAP 1.2 版本在2001年由W3C(万维网联盟)发布,旨在提供一个简单且轻量级的通信机制。这个版本的SOAP协议由四个主要部分组成: 1. **信封(Envelope)**:这部分定义了消息的结构,用于描述消息的内容和处理方式...
SOAP 1.1 和 SOAP 1.2 区别详解 SOAP(Simple Object Access Protocol)是一种基于 XML 的轻量级协议,用于在网络上进行数据交换。SOAP 1.1 和 SOAP 1.2 是两个不同的版本,它们之间存在一些关键的区别。 首先,从...
包含以下三部分: SOAP Version 1.2 Part 0: Primer SOAP Version 1.2 Part 1: Messaging Framework SOAP Version 1.2 Part 2: Adjuncts
2. **SOAP1.2协议模型** SOAP1.2采用请求-响应模型,即客户端发送一个SOAP消息到服务器,服务器处理后返回响应。这种模型保证了服务的交互性和同步性。 3. **SOAP动作** 在SOAP1.2中,"SOAPAction" HTTP头字段被...
SOAP 1.2 规范是Web服务交互中一个重要的通信协议标准,由World Wide Web Consortium(W3C)制定并发布。这个规范提供了一种简单且轻量级的方法,使得在分散、松散耦合的环境中,XML可以用于结构化和类型化的信息...
4. **开发工具**:开发SOAP 1.2 Web服务通常需要IDE支持,如Eclipse、IntelliJ IDEA或Visual Studio,这些工具通常内置了Web服务开发框架,如Apache CXF、 Axis2 或Spring-WS。 5. **运行环境**:服务器端需要支持...
调用pb开发的webserver(SOAP 1.2) /* POST /webservice/n_webservice.asmx HTTP/1.1 Host: localhost Content-Type: application/soap+xml; charset=utf-8 Content-Length: length <?xml version="1.0" encoding=...
### SOAP 1.2 Part 1: Messaging Framework #### 概述 SOAP(Simple Object Access Protocol)1.2 版本第一部分主要介绍了SOAP的消息框架。该文档是W3C组织于2007年4月27日发布的推荐标准。此版本更新并取代了之前...
所有版权均属于W3C.org,这里只是把规范涉及到的网页(http://www.w3.org/TR/soap)制作为pdf文件上传方便广大网友参考。 任何变更请及时参照http://www.w3.org/TR/soap。另外,特别感谢功能强大使用方便的PDF制作工具...
根据提供的文件信息,本文将详细介绍基于XML形式的XCBL文件在IBX平台上传输封包的规范,即“IBX soap 1.2 envelope specification”。该规范涉及到了SOAP(简单对象访问协议)的基础知识、XML声明、SOAP信封结构、...
SOAP 1.2 是 SOAP 的一个标准版本,由 W3C 工作组在 2000 年 9 月至 2003 年 6 月期间制定。SOAP 1.2 由三个部分组成:Primer、Messaging Framework 和 Adjuncts。 在 SOAP 消息中,Envelope 是最外层的元素,包含 ...
goetas-webservices / soap-client SOAP 1.1和1.2客户端规范PHP实现。 优点:纯PHP,不依赖于ext-soap可扩展(JMS事件侦听器支持)PSR-7 HTTP消息传递goetas-webservices / soap-client PHP实现SOAP 1.1和1.2客户端...
PHP实现SOAP 1.1和1.2服务器规范。 优点: 纯PHP,不依赖ext-soap 可扩展(JMS事件侦听器支持) PSR-7 HTTP消息传递 PSR-15 HTTP服务器处理程序 无需在生产中解析WSDL / XSD IDE类型提示支持 仅支持文档/文字...
SOAP(Simple Object Access Protocol),简单对象访问协议,是用于在Web上交换结构化和类型化信息的一种协议,它是构建Web服务的核心技术之一。 在标题和描述中提到的"webservice,soap调用",这是指使用SOAP协议...
**SOAP学习手册** SOAP(Simple Object Access Protocol)是一种基于XML(Extensible Markup Language)的协议,用于在Web服务中交换结构化和类型化的信息。它允许应用程序通过HTTP(Hypertext Transfer Protocol)...
2. **SOAP命名空间管理**:理解如何在SOAP消息中正确处理命名空间,因为XML元素可能属于不同的命名空间,这在解析和生成XML时是非常关键的。 3. **错误处理**:观察QtSoap是如何处理解析错误、网络错误和其他可能...