`
卡其色秋天
  • 浏览: 33271 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论
阅读更多

SOAP 规范

SOAP:简单对象访问协议

 (2001-1-1)

摘要

SOAP是用在分散或分布的环境中交换信息的简单的协议,它是一个基于XML的协议,包括三个部分:封装定义了一个描述消息中包含什么内容以及如何处理它们的框架,编码规则用于表示应用程序定义的数据类型的实例,另外还有一个表示远程过程调用和应答的协定。SOAP被设计为可以与各种其它协议结合使用;但这篇文章仅描述如何将SOAPHTTPHTTP扩展框架相结合。


目录
1.
简介
1.1
设计目标
1.2
符号协定
1.3 SOAP
消息举例
2. SOAP
消息交换模型
3.
XML的关系
4. SOAP
封装
4.1.1 SOAP encodingStyle
属性
4.1.2
封装版本模型
4.2 SOAP

4.2.1
使用SOAP头属性
4.2.2 SOAP actor
属性
4.2.3 SOAP mustUnderstand
属性
4.3 SOAP

4.3.1 SOAP
头和体的关系
4.4 SOAP
错误
4.4.1 SOAP
错误代码
5. SOAP
编码
5.1 XML
编码类型规则
5.2
简单类型
5.2.1
字符串
5.2.2
枚举
5.2.3
字符数组
5.3
多态 Accessor
5.4
复合类型
5.4.1
复合值和对值的引用
5.4.2
数组
5.4.2.1 PartiallyTransmitted Arrays
5.4.2.2
稀疏数组
5.4.3
一般复合类型
5.5
缺省值
5.6 SOAP root
属性
6.
HTTP中使用SOAP
6.1 SOAP HTTP
请求
6.1.1 HTTP
头中的SOAPAction
6.2 SOAP HTTP
应答
6.3 HTTP
扩展框架
6.4 SOAP HTTP
举例
7.
SOAP表示RPC
7.1 RPC
SOAP
7.2 RPC
SOAP
8.
安全考虑
9.
参考文献
A. SOAP
封装举例

A.1 请求编码举例

A.2 应答编码举例

1. 简介

SOAPXML形式提供了一个简单、轻量的用于在分散或分布环境中交换结构化和类型化信息的机制。SOAP本身并没有定义任何应用程序语义,如编程模型或特定语义的实现;实际上它通过提供一个有标准组件的包模型和在模块中编码数据的机制,定义了一个简单的表示应用程序语义的机制。这使SOAP能够被用于从消息传递到RPC的各种系统。

 

SOAP包括三个部分

 

SOAP封装(见第4节)结构定义了一个整体框架用来表示消息中包含什么内容,谁来处理这些内容以及这些内容是可选的或是必需的。
SOAP
编码规则(见第5节)定义了用以交换应用程序定义的数据类型的实例的一系列机制。
SOAP RPC
表示(见第7节)定义了一个用来表示远程过程调用和应答的协定。
虽然这三个部分都作为SOAP的一部分一起描述,但它们在功能上是相交的。特别的,封装和编码规则是在不同的名域中定义的,这种模块性的定义方法增加了简单性。

SOAP封装,SOAP编码规则和SOAP RPC协定之外,这个规范还定义了两个协议的绑定,描述了在有或没有HTTP扩展框架[6]的情况下,SOAP消息如何包含在HTTP消息[5]中被传送。

1.1 设计目标
SOAP
的主要设计目标是简单性和可扩展性,这意味着传统的消息系统和分布对象系统的某些性质不是SOAP规范的一部分。这些性质包括:

分布式碎片收集
成批传送消息
对象引用(要求分布式碎片收集)
激活机制(要求对象引用)
1.2 符号约定
这篇文章中的关键字 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", "OPTIONAL"的解释在RFC-2119 [2]中。

这篇文章中用到的名域前缀 "SOAP-ENV" "SOAP-ENC"分别与"http://schemas.xmlsoap.org/soap/envelope/" "http://schemas.xmlsoap.org/soap/encoding/"关联。

整篇文档中,名域前缀“xsi”被假定为与URI "http://www.w3.org/1999/XMLSchema-instance“(在XML Schema规范[11]定义)相连。类似的,名域前缀”xsd“被假定为与URI "http://www.w3.org/1999/XMLSchema"(在 [10]中定义)相连。名域前缀”tns“用来表示任意名域。所有其它的名域前缀都只是例子。

名域URI的基本形式”someURI“表示某些依赖于应用程序或上下文的URI[4]

这个规范用扩展BNF(在RFC2616[5] 描述)描述某些结构。

1.3 SOAP消息举例
在这个例子中,GetLastTradePrice SOAP 请求被发往 StockQuote服务。这个请求携带一个字符串参数和ticker符号,在SOAP应答中返回一个浮点数。XML名域用来区分SOAP标志符和应用程序特定的标志符。这个例子说明了在第6节中定义的HTTP绑定。如果SOAP中管理XML负载的规则完全独立于HTTP是没有意义的,因为事实上该负载是由HTTP携带的。

Appendix A中有更多的例子。

1 HTTP请求中嵌入SOAP消息

POST /StockQuote HTTP/1.1
Host:
www.stockquoteserver.com
Content-Type: text/xml;
charset="utf-8"
Content-Length: nnnn
SOAPAction:
"Some-URI"

<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
 <SOAP-ENV:Body>
 <m:GetLastTradePrice xmlns:m="Some-URI">
 <symbol>DIS</symbol>
 </m:GetLastTradePrice>
 </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

下面是一条应答消息,包括HTTP消息,SOAP消息是其具体内容:

2 HTTP应答中嵌入SOAP消息

HTTP/1.1 200 OK
Content-Type: text/xml;
charset="utf-8"
Content-Length:
nnnn

<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
 <SOAP-ENV:Body>
 <m:GetLastTradePriceResponse xmlns:m="Some-URI">
<Price>34.5</Price>
 </m:GetLastTradePriceResponse>
 </SOAP-ENV:Body>
</SOAP-ENV:Envelope>



2. SOAP消息交换模型
SOAP
消息从发送方到接收方是单向传送,但正如上面显示的,SOAP消息经常以请求/应答的方式实现。

SOAP
实现可以通过开发特定网络系统的特性来优化。例如,HTTP绑定(见第6节)使SOAP应答消息以HTTP应答的方式传输,并使用同一个连接返回请求。

不管SOAP被绑定到哪个协议,SOAP消息采用所谓的消息路径发送,这使在终节点之外的中间节点可以处理消息。

一个接收SOAP消息的SOAP应用程序必须按顺序执行以下的动作来处理消息:

识别应用程序想要的SOAP消息的所有部分 (见4.2.2节)
检验应用程序是否支持第一步中识别的消息中所有必需部分并处理它。如果不支持,则丢弃消息(见4.4节)。在不影响处理结果的情况下,处理器可能忽略第一步中识别出的可选部分。
如果这个SOAP应用程序不是这个消息的最终目的地,则在转发消息之前删除第一步中识别出来的所有部分。
为了正确处理一条消息或者消息的一部分,SOAP处理器需要理解:所用的交换方式(单向,请求/应答,多路发送等等),这种方式下接收者的任务,RPC机制(如果有的话)的使用(如第7节中所述),数据的表现方法或编码,还有其它必需的语义。

尽管属性比如SOAP encodingstyle(见4.1.1节)可以用于描述一个消息的某些方面,但这个规范并不强制所有的接收方也必须有同样的属性并取同样的属性值。举个例子,某一特定的应用可能知道一个元素表示一条遵循第7节约定的RPC请求,但是另外一些应用可能认为指向该元素的所有消息都用单向传输,而不是类似第7节的请求应答模式。
(译者注:交互双方的SOAP消息并不一定要遵循同样的格式设定,而只需要以一种双方可理解的格式交换信息就可以了)



3. XML的关系
所有的SOAP消息都使用XML形式编码(更多有关XML的信息请见[7]

一个SOAP应用程序产生的消息中,所有由SOAP定义的元素和属性中必须包括正确的名域。SOAP应用程序必须能够处理它接收到的消息中的SOAP名域(见4.4节),并且它可以处理没有SOAP名域的SOAP消息,就象它们有正确的名域一样。

SOAP
定义了两个名域(更多有关XML名域的信息请见[8]

SOAP
封装的名域标志符是"http://schemas.xmlsoap.org/soap/envelope/"
SOAP
的编码规则的名域标志符是"http://schemas.xmlsoap.org/soap/encoding/"
SOAP
消息中不能包含文档类型声明,也不能包括消息处理指令。[7]

SOAP
使用"ID"类型"id"属性来指定一个元素的唯一的标志符,同时该属性是局部的和无需校验的。SOAP使用"uri-reference"类型的"href"属性指定对这个值的引用,同时该属性是局部的和无需校验的。这样就遵从了XML规范[7]XML Schema规范[11]XML连接语言规范[9]的风格。

除了SOAP mustUnderstand 属性(4.2.3节)和SOAP actor属性(4.2.2节)之外,一般允许属性和它们的值出现在XML文档实例或Schema中(两者效果相同)。也就是说,在DTDSchema中声明一个缺省值或固定值和在XML文档实例中设置它的值在语义上相同。

分享到:
评论

相关推荐

    SOAP_1.2规范

    SOAP 1.2 规范是Web服务交互中一个重要的通信协议标准,由World Wide Web Consortium(W3C)制定并发布。这个规范提供了一种简单且轻量级的方法,使得在分散、松散耦合的环境中,XML可以用于结构化和类型化的信息...

    soap协议规范.pdf

    ### SOAP协议规范详解 #### 一、概述 SOAP(Simple Object Access Protocol)是一种基于XML的信息交换协议,旨在为分布式环境中不同应用之间的通信提供一种标准化的方法。该协议规范由多个部分组成,包括SOAP封装...

    soap规范web service调用

    ### SOAP规范Web Service调用详解 #### 一、SOAP简介 **SOAP**(Simple Object Access Protocol)是一种基于XML的标准协议,用于在分布式环境中交换结构化的信息。它定义了一种消息格式,使得不同应用之间可以通过...

    soap协议规范 soap协议规范

    此外,SOAP规范还定义了两种协议绑定,说明了如何在HTTP消息中承载SOAP消息,即使在没有HTTP扩展框架的情况下。SOAP消息通常通过HTTP POST方法发送,HTTP头中包含了SOAPAction,用于标识调用的服务操作。 在SOAP...

    SOAP协议规范(中文版).doc

    这个中文文档虽然不是完整的SOAP规范,但提供了SOAP的基本框架和概念,有助于初学者理解SOAP的工作原理。更详细的规范和实践指南可以从W3C或其他资源获取。为了深入理解和应用SOAP,建议参考官方的英文文档以获取最...

    SOAP协议规范(中文)

    SOAP协议规范,从网上找到的,备份一下。

    SOAP协议规范——SOAP详解

    1. **SOAP消息结构:** SOAP消息以XML文档的形式发送,遵循一定的结构规则。一个基本的SOAP消息包括三部分: - **Envelope(信封)**:定义了消息的边界,并指明消息的版本和包含的内容。 - **Header(头部)**:...

    SOAP协议规范中文版

    SOAP以XML形式提供了一个简单、轻量的用于在分散或分布环境中交换结构化和类型信息的机制。SOAP本身并没有定义任何应用程序语义,如编程模型或特定语义的实现;实际上它通过提供一个有标准组件的包模型和在模块中...

    SOAP协议最新规范文档

    1. **SOAP封装**:这部分定义了消息的内容结构,包括消息头和消息体。消息头可以包含元数据,如安全信息、路由指令等,而消息体则包含实际的数据。封装确保了消息的完整性和指定处理者。 2. **SOAP编码规则**:SOAP...

    SOAP1.2协议规范

    1. **SOAP消息结构** SOAP1.2的消息结构基于XML,由一个XML文档构成,主要包含三个部分:Header、Body和Envelope。Envelope是SOAP消息的基础,定义了消息的边界;Header包含了与消息处理相关的元数据,如认证信息、...

    Soap 协议规范

    Soap协议规范。 SOAP 以XML 形式提供了一个简单、轻量的用于在分散或分布环境中交换结构化和类型信 息的机制。

    SOAP协议规范 中文的

    1. **SOAP封装**:这部分定义了消息的结构,包括消息内容、处理者和内容的可选性或必要性。它提供了一个框架,用于理解消息的组成部分和它们的作用。 2. **SOAP编码规则**:SOAP编码规则定义了如何将应用程序定义的...

    SOAP协议规范

    **SOAP协议规范** SOAP(Simple Object Access Protocol,简单对象访问协议)是一种轻量级的、基于XML的协议,用于在Web服务中交换结构化和类型化的信息。它允许应用程序通过HTTP或其他传输协议发送和接收数据,...

    SOAP1.2规范

    SOAP 1.2 规范是Web服务交互中的一种重要标准,由W3C(万维网联盟)制定,旨在促进XML(可扩展标记语言)在分布式环境中的结构化信息交换。SOAP,全称为Simple Object Access Protocol(简单对象访问协议),提供了...

    soap协议规范

    在SOAP规范中,“MUST”、“SHALL NOT”、“SHOULD”等关键词遵循RFC-2119的规定,用于指示协议的强制性要求和建议。同时,SOAP使用了一系列的名域前缀来关联特定的URI,例如“SOAP-ENV”与SOAP信封相关的URI关联,...

    中文Soap协议规范

    除了上述核心部分,SOAP规范还定义了两种协议绑定,即如何将SOAP消息封装在HTTP消息中进行传输。这包括了在标准HTTP和带有扩展的HTTP环境下的消息传递。例如,HTTP POST方法常用于发送SOAP请求,而HTTP响应则用于...

    soap-build生成Soap接口请求报文

    在Java开发中,处理SOAP请求通常涉及创建符合SOAP规范的XML字符串,这可能是一项繁琐的任务。 “soap-build”工具的出现,就是为了简化这个过程。它专为Java开发者设计,能够自动生成符合指定接口规范的SOAP请求...

    SOAP协议规范详解

    1. **Envelope**:这是SOAP消息的基本结构,它定义了消息的边界。在XML中,它表示为`&lt;soap:Envelope&gt;`,其中`soap`是命名空间前缀,通常绑定到`http://www.w3.org/2003/05/soap-envelope`。 2. **Header**:可选的`...

Global site tag (gtag.js) - Google Analytics