SOAP:简单对象访问协议
4.1.2 封装版本模型
SOAP没有定义常规的基于主版本号和辅版本号的版本形式。SOAP消息必须有一个封装元
素与名域"http://schemas.xmlsoap.org/soap/envelope/关联。如果SOAP应用程序接收
到的SOAP消息中的SOAP封装元素与其他的名域关联,则视为版本错误,应用程序必须丢
弃这个消息。如果消息是通过HTTP之类的请求/应答协议收到的,应用程序必须回答一个
SOAP VersionMismatch 错误信息(见4.4节)。
4.2 SOAP头
SOAP为相互通信的团体之间提供了一种很灵活的机制:在无须预先协定的情况下,以分
散但标准的方式扩展消息。可以在SOAP头中添加条目实现这种扩展,典型的例子有认证
,事务管理,支付等等。
头元素编码为SOAP封装元素的第一个直接子元素。头元素的所有直接子元素称作条目。
条目的编码规则如下:
一个条目有它的完整的元素名(包括名域URI和局部名)确定。SOAP头的直接子元素必须
有名域限制。
SOAP encodingStyle属性可以用来指示条目所用的编码形式(见4.1.1节)
SOAP mustUnderstand属性(见4.2.3节)和SOAP actor属性(见4.2.2节)可以用来指示
如何处理这个条目以及由谁来处理。(见4.2.1节)
4.2.1 使用头属性
这一节中定义的SOAP头属性确定了SOAP消息的接收者应该怎样按第2节中所述的方式处理
消息。产生SOAP消息的SOAP应用程序,应该仅仅在SOAP头元素的直接子元素中使用这些
SOAP头属性。SOAP消息的接收者必须忽略所有不在SOAP头元素的直接子元素中SOAP头属
性。
下面的例子是一个SOAP头,包括一个元素标志符"Transaction","mustUnderstand"取值
为"1"和数值5。这应该以如下方式编码:
<SOAP-ENV:Header>
<t:Transaction
xmlns:t="some-URI" SOAP-ENV:mustUnderstand="1">
5
</t:Transaction>
</SOAP-ENV:Header>
4.2.2 SOAP actor属性
一个SOAP消息从始节点到终节点的过程中,可能沿着消息路径经过一系列SOAP中间节点
。一个SOAP中间节点是一个可以接收转发SOAP消息的应用程序。中间节点和终节点由UR
I区分。
可能SOAP消息的终节点并不需要所有部分,而在消息路径上的一个和几个中间节点可能
需要这些内容。头元素的接收者扮演的角色类似于一个过滤器,防止这些只发给本接受
者的消息部分扩散到其它节点。即一个头元素的接收者必须不转发这些头元素到SOAP消
息路径上的下一个应用程序。同样的,接收者可能插入一个相似的头元素。
SOAP actor全局属性可以用于指示头元素的接收者。SOAP actor属性的值是一个URI。U
RI "http://schemas.xmlsoap.org/soap/actor/next指出了第一个处理这个消息的SOA
P应用程序需要这个头元素。这类似于HTTP头中用Connection域表示hop-by-hop范围模型
。
省略SOAP actor属性表示接收者是SOAP消息的终节点。
如果这个属性要生效,它必须出现在SOAP消息实例中。(见第3节和4.2.1节)
4.2.3 SOAP mustUnderstand属性
SOAP mustUnderstand全局属性用来指示接受者在处理消息时这个条目是否必须处理。条
目的接收者由SOAP actor属性定义(见4.2.2节)。MustUnderstand属性的值是"1" 或
"0"。缺少SOAP mustUnderstand属性在语义上等同于它的值为"0"。
如果一个头元素的SOAP mustUnderstand属性的值是"1",那么条目的接受者必须或者遵守
语义(如以元素的全名传送)并按照语义正确的处理,或者放弃处理消息(见4.4节)。
SOAP mustUnderstand 属性考虑了消息演变的准确性(robust evolution)。必须假定
包含SOAP mustUnderstand属性且值为"1"的元素以某种方式修改了它们的父元素或同层
元素的语义。以这种方式连接元素确保了语义上的变化不会被那些不能完全理解它的接
收者忽略。
如果这个属性要生效,它必须出现在SOAP消息实例中。(见第3节和4.2.1节)
from:asp学习网/title:SOAP:简单对象访问协议/ time:2007-6-18 10:41:59
本文主题SOAP