asp学习网: 首页 >> asp.net >> SOAP:简单对象访问协议

SOAP:简单对象访问协议


1. 简介
SOAP以XML形式提供了一个简单、轻量的用于在分散或分布环境中交换结构化和类型化信
息的机制。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", "SH
OULD", "SHOULD NOT", "RECOMMENDED", "MAY", 和"OPTIONAL"的解释在RFC-2119 [2]中

这篇文章中用到的名域前缀 "SOAP-ENV" 和 "SOAP-ENC"分别与"http://schemas.xmlso
ap.org/soap/envelope/" 和"http://schemas.xmlsoap.org/soap/encoding/关联。
整篇文档中,名域前缀“xsi”被假定为与URI "http://www.w3.org/1999/XMLSchema-i
nstance“(在XML Schema规范[11]定义)相连。类似的,名域前缀”xsd“被假定为与
URI "http://www.w3.org/1999/XMLSchema(在 [10]中定义)相连。名域前缀”tns“
用来表示任意名域。所有其它的名域前缀都只是例子。
名域URI的基本形式”some-URI“表示某些依赖于应用程序或上下文的URI[4]。
这个规范用扩展BNF(在RFC-2616[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节)使SOA
P应答消息以HTTP应答的方式传输,并使用同一个连接返回请求。
不管SOAP被绑定到哪个协议,SOAP消息采用所谓的”消息路径“发送,这使在终节点之
外的中间节点可以处理消息。
一个接收SOAP消息的SOAP应用程序必须按顺序执行以下的动作来处理消息:
识别应用程序想要的SOAP消息的所有部分 (见4.2.2节)
检验应用程序是否支持第一步中识别的消息中所有必需部分并处理它。如果不支持,则
丢弃消息(见4.4节)。在不影响处理结果的情况下,处理器可能忽略第一步中识别出的
可选部分。
如果这个SOAP应用程序不是这个消息的最终目的地,则在转发消息之前删除第一步中识
别出来的所有部分。
为了正确处理一条消息或者消息的一部分,SOAP处理器需要理解:所用的交换方式(单
向,请求/应答,多路发送等等),这种方式下接收者的任务,RPC机制(如果有的话)
的使用(如第7节中所述),数据的表现方法或编码,还有其它必需的语义。
尽管属性比如SOAP encodingstyle(见4.1.1节)可以用于描述一个消息的某些方面,但
这个规范并不强制所有的接收方也必须有同样的属性并取同样的属性值。举个例子,某
一特定的应用可能知道一个元素表示一条遵循第7节约定的RPC请求,但是另外一些应用
可能认为指向该元素的所有消息都用单向传输,而不是类似第7节的请求应答模式。
(译者注:交互双方的SOAP消息并不一定要遵循同样的格式设定,而只需要以一种双方
可理解的格式交换信息就可以了)

from:asp学习网/title:SOAP:简单对象访问协议/ time:2007-6-18 10:41:59

本文主题SOAP

asp教程 ©2006-2007 aspxuexi.com | 关于站点 | 版权隐私 | 站内搜索
复制或者翻版 请于夜间进行