日期:2010-08-10 浏览次数:20445 次
soap包括三个部分
soap封装(见第4节)结构定义了一个整体框架用来表示消息中包含什么内容,谁来处理这些内容以及这些内容是可选的或是必需的。
SOAP编码规则(见第5节)定义了用以交换应用程序定义的数据类型的实例的一系列机制。
SOAP RPC表示(见第7节)定义了一个用来表示远程过程调用和应答的协定。
虽然这三个部分都作为SOAP的一部分一起描述,但它们在功能上是相交的。特别的,封装和编码规则是在不同的名域中定义的,这种模块性的定义方法增加了简单性在SOAP封装,SOAP编码规则和SOAPRPC协定之外,这个规范还定义了两个协议的绑定,描述了在有或没有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“(在XMLSchema规范[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消息从发送方到接