SOAP1.1规范
来源:互联网 发布:c语言中a是多少 编辑:程序博客网 时间:2024/06/14 04:24
( http://blog.csdn.net/lmstone )
文档描述:
SOAP是Web Services中重要的技术。
文档经历:
1. 2005-10-27 开始文档历程
1.节录
SOAP 是一个在分布式环境中使用XML交换信息的通讯协议,其中包含了三个部份:一个信封中(envelope)定义如何处理讯息的基础结构;一组程序代码撰写规则的集合用以表达应用程序定义数据型别的执行个体;以及描述远程过程调用和回应的协议。SOAP也可以和许多其它通讯协议联合使用。然而,本文件中定义的连结只会描述如何使用SOAP联合HTTP和HTTP Extension Framework协同工作。
2.简介
SOAP 使用XML在分布式的环境(点对点)中提供一种简单结构和型别信息的交换机制,SOAP自身并不会定义任何应用程序的语法,SOAP定义了表达应用程序语法的机制(利用模块化的封装模式和在模块中标记数据的机制)。这个功能让SOAP可以用于广泛的各类型系统之中。
SOAP包含三个部份:
l SOAP信封中定义了表达讯息中包含什么的基础结构;谁应该处理这个讯息;无论讯息是选择性或强制性。
l SOAP程序代码撰写规则定义了一个序列化的机制,这个机制用于交换应用程序定义数据型别的执行个体。
l SOAP RPC定义用于描述远程过程调用和响应的协议。
除了SOAP信封、SOAP程序代码撰写规则和SOAP RPC协议以外,SOAP也定义了两种通讯协议的连结方式,其中包含描述SOAP讯息如何在HTTP[ 5]讯息中传送(协同或不协同HTTP Extension Framework[6]工作)。
2.1. 设计目标
SOAP 的主要设计目标就是要具备简单性和延伸性,这表示它包含了来自传统讯息系统的数个功能,并且分布式对象系统不是核心SOAP规格的一部份,这些功能包含:
l Distributed garbage collection
l Boxcarring or batching of messages
l Objects-by-reference(需要有Distributed garbage collection)
l Activation(需要有Objects-by-reference)
2.2. 标记协议
本文件中的名称空间前置字「SOAP-ENV」和「SOAP-ENC」分别与SOAP名称空间「http://schemas.xmlsoap.org/soap/envelope」和「schemas.xmlsoap.org/soap/encoding」联合使用。
本文件中的名称空间前置字「xsi」是与XML Schemas 规格 [11]中定义的URI「 http://www.w3.org/1999/XMLSchema-instance」联合使用;同样的,名称空间前置字「xsd」是与规格 [10] 中定义的URI「 http://www.w3.org/1999/XMLSchema」联合使用;名称空间前置字「tns」用于指定目前文件的名称空间目标。
「Some-URI」的名称空间URI代表某些应用程序相依(application-dependent)或执行环境相依(context-dependent)的URI [4]。
这个规格也使用在RFC-2616 [5]中描述的Backus-Naur Form(BNF)。
2.3. SOAP讯息的范例
在本范例中,GetLastTradePrice SOAP请求传送至StockQuote服务。SOAP Envelope元素为XML文件中的最顶层元素,以代表该文件为SOAP讯息,本范例显示了第六节中定义的HTTP连结。
范例1嵌在HTTP请求中的SOAP讯息
SOAP Message Embedded in HTTP Request
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 讯息
SOAP Message Embedded in HTTP Response
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>
3.SOAP讯息交换模式
SOAP 的原理基本上是从传送者至接收者的单方向传输,但是如同上述范例所示,SOAP讯息交换通常会和商业上的伙伴以请求/响应的方式建置。
SOAP 是非常有弹性的技术,可以为特定网络系统所需要的特性以最佳化的方式建置。举例来说,在第6节中描述的HTPP连结提供了以HTTP响应方式传递的SOAP响应讯息,并使用同一个联机阶段为输入的请求。
接收SOAP讯息的SOAP应用程序必须依次执行下列的动作:
1. 识别供该应用程序处理的SOAP讯息每一个部份(请参阅5.2.2 节)。
2. 确认该应用程序支持步骤1中识别的每一个部份(请参阅5.2.3 节),某些不会影响输出的选择性部份会被忽略(请参阅5.4 节)。
3. 如果SOAP应用程序不是该讯息的最终目的,那么在转传讯息之前先移除步骤1中所识别的部份。
4.SOAP和XML的关联性
所有的SOAP讯息都使用XML程序代码撰写(请参阅 [7]以取得相关于XML的更多信息)。
SOAP 应用程序应该要在所有的元素中都包含正确的SOAP名称空间,SOAP应用程序必须能够在其接收的讯息中处理SOAP名称空间,并且必须能够忽略名称空间错误的讯息(请参阅第5.4 节)。同时它也许应该能够处理没有SOAP名称空间的SOAP讯息,并且将这些没有名称空间的讯息视为具备正确的SOAP名称空间。
SOAP定义两种名称空间(请参阅 [8]以取得相关于XML名称空间的更多信息):
• SOAP Envelope有名称空间识别项
「http://schemas.xmlsoap.org/soap/envelope/」。
• SOAP Serialization有名称空间识别项
「http://schemas.xmlsoap.org/soap/encoding/」。
SOAP 讯息中绝对不能包含文件类别定义(DTD)和处理指令(PI)[7]。
SOAP 使用本机、未限定类别「ID」的「id」属性以指定一个程序代码撰写元素的唯一识别项;
SOAP 使用本机、未限定类别「uri-reference」的「href」属性以指定该值的参照,这些方式都遵守XML Specification [7]、XML Schema Specification [11]和XML Language Specification[9]。
除了使用SOAP mustUnderstand属性(请参阅第5.2.3 节)和SOAP actor属性(请参阅第5.2.2 节)以外,它通常也允许属性和属性值出现在XML执行个体或架构中-这就表示在DTD或架构中有默认值或固定值的话,在语法上是同于出现在执行个体中。
5.SOAP Envelope
SOAP讯息是XML文件,该文件中一定要包含SOAP Envelope和SOAP Body,而SOAP Header是选择性的。在本节定义中元素和属性的名称空间识别项是「 http://schemas.xmlsoap.org/soap/envelope/」。SOAP讯息包含下列各项:
1. Envelope是XML文件的顶端元素,代表该文件为SOAP讯息。
2. Header是一般用于在分布式环境中的SOAP讯息中新增功能的机制,不需要事先与商业伙伴建立合约。SOAP定义了一些属性用于在Header中指定「谁」处理该功能,以及它是选择性或强制性(请参阅第5.2 节)。
3. Body就是接收者所要接收讯息的容器(请参阅第5.3 节),SOAP定义了一个元素供Body使用,即为Fault元素用以报告错误。
语法规则如下:
1. Envelope
o该元素名称为「Envelope」。
o该元素必须出现在SOAP讯息中
o该元素可以包含名称空间宣告,以及额外的属性。如果存在额外属性,属性必须使用名称空间限定(namespace-qualified);一样的,该元素也许会包含子元素,如果存在子元素,这些子元素必须使用名称空间限定,并且位于Body元素之后。
2. Header(请参阅第5.2 节)
o该元素名称为「Header」。
o该元素不一定要出现在SOAP讯息中,如果SOAP讯息中存在Header元素,那么Header元素必须直接为SOAP Envelope元素的第一个子元素。
o所有的SOAP Header元素的直接子元素必须名称空间限定。
3. Body(请参阅第5.3 节)
o该元素名称为「Body」。
o该元素必须出现在SOAP讯息中,并且必须为SOAP Envelope元素的直接子元素。如果存在SOAP Header元素的话,那么它就必须直接位于其后,否则SOAP Body元素就必须为SOAP Envelope元素的直接子元素。
o SOAP Body元素的直接子元素不一定要名称空间限定,SOAP定义了SOAP Fault元素用以报告错误(请参阅第5.4 节)。
5.1.
5.1.1. SOAP encodingStyle属性
SOAP encodingStyle 通用属性可以指定用于SOAP讯息的序列规则,这个属性不一定要出现在任何元素中,并且有效范围从宣告该属性的元素内容开始及其所有的子元素。
该属性的值是一个依照顺序排列的清单,其中包含一或多个URI以识别要连续套用的规则,值的范例如下:
"http://schemas.xmlsoap.org/soap/encoding/"
"http://my.host/encoding/restricted http://my.host/encoding/"
""
在第6节中SOAP定义的序列规则是由URI「http://schemas.xmlsoap.org/soap/encoding/」所识别,使用这个特定序列的讯息应该要使用SOAP encodingStyle 属性。还有,所有的URI
语法上都使用「http://schemas.xmlsoap.org/soap/encoding/」开始。
没有长度的URI(zero-length URI,"")值是用于指定该元素的程序代码撰写样式并没有特定要求。
5.1.2. Envelope Versioning Model
SOAP 讯息必须有Envelope元素联合名称空间「http://schemas.xmlsoap.org/soap/envelope/」使用,如果一个SOAP应用程序接收了一个讯息,而该讯息的SOAP Envelope元素使用和上述不同的名称空间,该应用程序就必须将其视为版本错误并忽略该讯息。如果讯息使用例如HTTP的请求/响应通讯协议,应用程序就必须响应一个SOAP VersionMismatch错误码讯息(使用「http://schemas.xmlsoap.org/soap/envelope/」名称空间)。
5.1.3. SOAP Header
SOAP 提供了一个具弹性的方式延伸讯息,以及一种模块化的方式与商业伙伴之间通讯。延伸讯息的典型范例就是在标头项目中建置例如验证、交易管理、付款方式等等信息。
Header 元素必须为SOAP Envelope XML元素的第一个直接子元素,所有Header元素的直接子元素就称为标头项目(header entry)。
标头项目标程序码撰写规则如下:
1. 标头项目由它的完整元素名称所识别,其中包含名称空间URI和本机名称,SOAPHeader的直接子元素必须名称空间限定。
2. SOAP encodingStyle属性不一定会被用于指定标头项目标程序码撰写样式(请参阅第5.1.1 节)。
3. SOAP mustUnderstand属性(请参阅第5.2.3 节)和SOAP actor属性(请参阅第5.2.2 节)不一定要用于指定如何处理项目或谁来处理(请参阅第5.2.1节)。
5.2.
5.2.1. 使用Header属性
在本节定义的SOAP Header属性决定SOAP讯息的接收者应该如何利用第3节所描述的方式处理该讯息。产生SOAP讯息的SOAP应用程序应该只会在SOAP Header元素的直接子元素使用SOAP Header属性,如果SOAP Header属性没有套用于SOAP Header元素的直接子元素之中,SOAP讯息的接收者必须忽略所有的SOAP Header属性。
标头使用元素识别项「Transaction」的范例-「mustUnderstand」属性的值为「1」;元素识别项「Transaction」值为「5」,程序代码撰写方式如下:
<SOAP-ENV:Header>
<t:Transaction
xmlns:t="some-URI " SOAP--ENV:mustUnderstand="1">
5
</t:Transaction>
</SOAP-ENV:Header>
5.2.2. SOAP actor属性
SOAP讯息从出发点至目的地之间会经过许多SOAP中间媒介,所谓SOAP中间媒介就是SOAP的应用程序,这些应用程序具备接收和转传SOAP讯息的能力,接收标头元素的接收者绝对不能将该标头元素转传到下一个SOAP应用程序,但是可以插入相似的标头元素。
SOAP actor 通用属性可以用于指定标头元素的接收者,SOAP actor属性的值是URI,特别的URI「http://schemas.xmlsoap.org/soap/next/」可以指定该标头元素试图传递的下一个SOAP应用程序。
删除SOAP actor属性指出接收者即为SOAP讯息的最终点。
该属性一定要依次出现在SOAP讯息执行个体中(请参阅第4节和第5.2.1节)。
5.2.3. SOAP mustUnderstand属性
SOAP mustUnderstand 通用属性用于指出标头项目接收者是否一定要处理标头项目,标头项目的接收者是由SOAP actor属性所定义(请参阅第5.2.2 节),mustUnderstand属性的值可以为「1」或「0」,如果没有指定SOAP mustUnderstand 属性值,预设为「0」。
如果该属性值为「1」,标头项目的接收者必须处理标头讯息,否则会传回错误(请参阅第5.4 节)。
该属性一定要依次出现在SOAP讯息执行个体中(请参阅第4节和第5.2.1节)。
5.2.4. SOAP Body
SOAP Body 元素必须为SOAP Envelope XML元素的第一个直接子元素,如果存在SOAPHeader元素的话,那么它就必须直接位于其后,否则SOAP Body元素就必须为SOAP Envelope元素的直接子元素。
所有的Body元素的直接子元素都称为数据主体项目(body entry),并且每一个数据主体项目在SOAP Body 元素中都是独立的元素。
数据主体的程序代码撰写规则如下:
1. 数据主体项目由它的完整元素名称所识别,其中包含名称空间URI和本机名称,SOAP Body元素的直接子元素不一定要名称空间限定。
2. SOAP encodingStyle属性不一定会被用于指定数据主体项目标程序码撰写样式(请参阅第5.1.1 节)。
SOAP定义了一个数据主体项目,即为Fault项目用于报告错误(请参阅5.4 节)。
5.3.
5.3.1. SOAP Header和Body的关联性
虽然Header和Body被定义为独立的元素,事实上它们之间还是有关联性。在数据主体项目和标头项目之间的关联性如下:如果标头项目使用预设的actor属性值和SOAP mustUnderstand属性值为「1」时,基本上这种情况和数据主体项目在语法上是相同的,预设的actor属性是不使用actor属性(请参阅5.2.2 节)。
5.4. SOAP Fault
SOAP Fault 元素用于传送SOAP讯息中的错误和/或状态信息。如果使用SOAP Fault元素,它一定要以数据主体的方式出现,并且只能够在Body元素中出现一次。
SOAP Fault元素定义下列四个子元素:
l faultcode元素由软件使用以提供算法的机制来识别错误,faultcode必须存在于SOAP Fault元素中并且其值必须如 [8]中所定义的完整名称。
l faultstring元素试图提供可供人类读取的错误解释,并且不执行演算处理。Faultstring元素相似于HTTP(请参阅 [6])所定义的「Reason-Phrase」,faultstring必须存在于SOAP Fault元素中并且应该至少要提供某些错误的解释信息。
l faultactor元素试图提供在讯息的路径中哪一个节点引起了错误(请参阅第3节),它与SOAP actor属性相似(请参阅第5.2.2 节),不同之处在于标头项目是指定目的地,而faultactor元素是指出错误的来源。faultactor属性的值以URI来识别,但并非SOAP讯息终点的应用程序都必须在其SOAP Fault元素中包含faultactor元素。
l detail元素试图指出特定应用程序的Body元素发生错误信息,如果Body元素的内容无法顺利处理,就必须存在detail;请注意detail绝对不能够用于传递属于标头项目的错误信息。
在Fault元素中缺少detail元素指定错误跟Body元素的处理并没有相关性,这样可以用于区分是否Body元素被正确处理或并没有错误发生。
detail元素的直接子元素称为明细项目(detail entry),而且每一个明细项目在detail元素中都是独立的元素。
detail项目标程序码撰写规则如下
1. 明细项目由它的完整元素名称所识别,其中包含名称空间URI和本机名称,明细元素的直接子元素不一定要名称空间限定。
2. SOAP encodingStyle属性不一定会被用于指定明细项目标程序码撰写样式(请参阅第5.1.1 节)。
5.5. SOAP Fault Codes
在本节中定义的faultcode值必须用于faultcode元素中,这些faultcode值的名称空间识别项为「http://schemas.xmlsoap.org/soap/envelope/」,在这个规格中使用这个名称空间只是个建议(并不是必须)。
预设的SOAP faultcode值为了与现存的faultcode值向后兼容是以一种延伸的方式定义,这个机制非常相似于HTTP(请参阅 [5] )的基本状态类别1xx、2xx和3xx等等。SOAP faultcode值不使用整数,并且使用XML完整名称定义(请参阅 [8]),字符「.(点)」用于分开faultcode值,范例如下:
Client.Authentication
本文件中定义的faultcode值集合:
名称
意义
VersionMismatch
SOAP Envelope 元素的处理发现无效的名称空间(请参阅第5.1.2 节)。
MustUnderstand
SOAP Header 元素的直接子元素无法解译或不遵从SOAP mustUnderstand 属性值为「1」的处理程序。
Clien
错误的Client 类别指出讯息的形成不正确或没有依次包含适当的信息。举例来说,讯息可能缺少正确的验证或付款方式信息,通常这个方式可以用来指定讯息不应该不经过修改过就重传。
Server
错误的Server 类别指出讯息无法处理,原因是讯息本身的内容没有直接的属性,但是仍然需要处理该讯息。举例来说,处理时和服务器的通讯没有响应,讯息也许会在稍后的时间点就可以顺利处理。
6.SOAP Encoding
SOAP 的程序代码撰写样式是基于简单的型别系统,该型别系统具备程序语言、数据库和半结构数据中的一般性型别系统功能。型别可以为简单的型别,或是由数个部份组合而成的型别。首先,任何标记法的架构都会有一致的型别系统描述,例如XML语法的架构一样;次之,已知的型别系统架构会确认XML语法架构,就建立了XML执行个体。相反的,所产生的XML执行个体就会与这些规则一致,并且会建立最初的值图形。
在本节中所定义的元素和属性的名称空间识别项是「http://schemas.xmlsoap.org/soap/encoding/」,之前所展示的程序代码撰写范例是假设所有的名称空间宣告都在较高的元素层级。
7.使用SOAP和HTTP协同工作
本节描述如何在HTTP中使用SOAP与(或不与)HTTP Extension Framework协同工作,连结SOAP和HTTP可以取得许多优点,例如SOAP的弹性和HTTP的丰富功能。使用HTTP传送SOAP讯息并不表示这样就会完全取代HTTP的语法,因为SOAP的语法会对应HTTP语法。
SOAP 会遵守HTTP请求/响应讯息模式,在HTTP的请求中提供SOAP请求的参数,并且在HTTP回应中包含SOAP回应参数。
当在HTTP讯息中包含SOAP数据主体时,HTTP应用程序必须遵循RFC 2376 [3]的媒体型别「text/xml」。
7.1. SOAP HTTP请求
纵使SOAP可以和多种HTTP请求方法联合使用,这个连结只能定义在HTTP POST中的SOAP请求(请参阅第8节以了解如何使用SOAP for PRC和第7.3节以了解如何使用HTTPExtension Framework)。
7.1.1. SOAPAction HTTP Header Field
SOAPAction HTTP 请求标头字段可以用于指定SOAP HTTP请求的意图,该值为一URI以识别该请求的意图。当发布SOAP HTTP请求时,HTTP客户端必须使用这个标头字段。
soapaction = "SOAPAction" ":" [ <">URI-reference <"> ]
URI-reference = <as defined in RFC 2396 [4]>
SOAPAction 标头字段的内容由服务器使用,例如防火墙以在HTTP中适当的筛选HTTP请求讯息。使用空字符串("")值的标头字段表示SOAP讯息是由HTTP Request-URI提供,没有值表示没有指定任何的意图。
举例来说:
SOAPAction:"http://electrocommerce.org/abc#MyMessage"
SOAPAction:"myapp.sdl"
SOAPAction:""
SOAPAction:
7.2. SOAP HTTP回应
SOAP HTTP 遵循HTTP状态码(HTTP的通讯状态信息)的语法,举例来说,2xx状态码指出包含SOAP组件的客户端请求已经顺利接收、解译并且接受等等。
当处理请求时发生SOAP错误,SOAP HTTP伺服程序必须发布HTTP 500「内部服务器错误」响应,并且在响应中包含SOAP讯息(其中包含SOAP Fault元素)以指出SOAP处理错误。
7.3. HTTP Extension Framework
SOAP 讯息也可以和HTTP Extension Framework [6]一起使用以辨识SOAP HTTP请求的内容。
是否使用HTTP Extension Framework或是简单的HTTP是取决于通讯双方的原则和能力的问题,客户端可以藉由使用强制性的延伸宣告或「M-」HTTP方法名称前置字以强制使用HTTPExtension Framework;服务器可以藉由使用510「Not Extended」HTTP状态码以强制使用HTTPExtension Framework。
用于指定SOAP使用Extension Framework的延伸识别项是「http://schemas.xmlsoap.org/soap/envelope/」。
7.4. SOAP HTTP范例
范例3使用POST的SOAP HTTP
SOAP HTTP Using POST
POST /StockQuote HTTP/1.1
Content-Type:text/xml;charset="utf-8"
Content-Length:nnnn
SOAPAction:"http://electrocommerce.org/abc#MyMessage"
<SOAP-ENV:Envelope...
HTTP/1.1 200 OK
Content-Type:text/xml;charset="utf-8"
Content-Length:nnnn
<SOAP-ENV:Envelope...
范例4使用HTTP Extension Framework的SOAP
SOAP Using HTTP Extension Framework
M-POST /StockQuote HTTP/1.1
Man:"http://schemas.xmlsoap.org/soap/envelope/";ns=NNNN
Content-Type:text/xml;charset="utf-8"
Content-Length:nnnn
NNNN-SOAPAction:"http://electrocommerce.org/abc#MyMessage"
<SOAP-ENV:Envelope...
8.使用SOAP执行RPC
SOAP 的设计目标之一是利用XML的弹性和延伸性来封装和交换RPC呼叫,本节定义远程过程调用和响应的统一表现方式。
使用HTTP为通讯协议连结的情况下,RPC呼叫会自然对应HTTP请求,并且PRC回应会自然对应HTTP回应。然而,使用SOAP执行PRC并不只限于和HTTP通讯协议连结。
您需要下列的信息以使用一个方法呼叫:
l 目标对象的URI。
l 方法的名称。
l 选择性的方法标记。
l 方法的参数。
l 选择性的标头数据。
8.1. RPC和SOAP Body
PRC 方法呼叫和响应都使用下列方式于SOAP Body元素中传送(请参阅第5.3节):
l 方法呼叫模式化为一结构。
l 方法呼叫视为单一结构,该结构中每一个in 或in/out 参数都包含存取器,该结构的命名和型别都和方法名称一致。
l 每一个in 或in/out 参数视为一个存取器,具有对应于参数名称的名称和对应于参数型别的型别。
l 方法响应是模式化为一结构。
l 方法响应视为单一结构,该结构中包含传回值和每一个out或in/out参数的存取器,第一个存取器就是参数后面传回的值,次序和方法标记中的次序一样。
l 每一个参数存取器都有一个相对于参数名称的名称和相对于参数型别的型别,传回值的存取器名称并不明显;同样地,结构名称也不明显。然而,方便之处在于方法名称后面会附加字符串「Response」。
8.2. RPC和SOAP Header
使用标头元素的范例就是在讯息中附带传送一个TransactionID,因为TransactionID并非标记的一部份,且一般是由基础结构组件所掌控(而非由应用程序代码),所以没有直接的方式在这种呼叫(于标头中传递非标记信息)中传递必要的信息。藉由新增一个项目至标头中,并且为其命名一个固定名称,在接收端的交易管理员就可以萃取出TransactionID。
9.安全性考量
在本文件中没有说明的论点即为某些专供整合性和私人信息保护的方法,本文件的较新版本将会说明这些考量论点。
10. 参考数据
[1] S. Bradner, "The Internet Standards Process" - Revision 3, RFC2026,HarvardUniversity, October 1996.
[2] S. Bradner, "Key words for use in RFCs to Indicate Requirement Levels", RFC2119,HarvardUniversity, March 1997.
[3] E. Whitehead, M. Murata, "XML Media Types", RFC2376, UC Irvine,Fuji Xerox Info.Systems, July 1998
[4] T. Berners-Lee, R. Fielding, L. Masinter, "Uniform Resource Identifiers (URI):GenericSyntax", RFC 2396, MIT/LCS, U.C. Irvine, Xerox Corporation, August 1998.
[5] R. Fielding, J. Gettys, J. C. Mogul, H. Frystyk, T. Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1", RFC 2616, U.C. Irvine, DEC W3C/MIT, DEC, W3C/MIT,W3C/MIT, January 1997
[6] H. Nielsen, P. Leach,S. Lawrence, "An HTTP Extension Framework", RFC 2774, Microsoft,Microsoft, Agranat Systems
[7] W3C建议标准「The XML Specification」。
[8] W3C建议标准「Namespaces in XML」。
[9] W3C Working Draft「XML Linking Language」,本草案还在修订中。
[10] W3C Working Draft「XML Schema Part 1: Structures」,本草案还在修订中。
[11] W3C Working Draft「XML Schema Part 1: Datatypes」,本草案还在修订中。
[12] Transfer Syntax NDR, in「DCE 1.1: Remote Procedure Call」。
[13] N. Freed,N. Borenstein, "Multipurpose Internet Mail Extensions (MIME) Part One: Format
of Internet Message Bodies", RFC2045, Innosoft, First Virtual, Novem-ber1996
11. SOAP Envelope范例
11.1. 呼叫请求的范例
范例5相似于范例1,但是有强制性的标头
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:Header>
<t:Transaction
xmlns:t="some-URI"
SOAP-ENV:mustUnderstand="1">
5
</t:Transaction>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<m:GetLastTradePrice xmlns:m="Some-URI">
<symbol>DEF</symbol>
</m:GetLastTradePrice>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
范例6相似于范例1,但是有多个请求参数
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:GetLastTradePriceDetailed
xmlns:m="Some-URI">
<Symbol>DEF</Symbol>
<Company>DEF Corp</Company>
<Price>34.1</Price>
</m:GetLastTradePriceDetailed>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
11.2. 响应的范例
范例7相似于范例2,但是有强制性的标头
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:Header>
<t:Transaction
xmlns:t="some-URI"
xsi:type="xsd:int " mustUnderstand=="1">
5
</t:Transaction>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<m:GetLastTradePriceResponse
xmlns:m="Some-URI">
<Price>34.5</Price>
</m:GetLastTradePriceResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
范例8相似于范例2,但是有结构
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">
<PriceAndVolume>
<LastTradePrice>
34.5
</LastTradePrice>
<DayVolume>
10000
</DayVolume>
</PriceAndVolume>
</m:GetLastTradePriceResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
范例9相似于范例2,但是强制性的标头发生错误
HTTP/1.1 500 Internal Server Error
Content-Type:text/xml;charset="utf-8"
Content-Length:nnnn
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:MustUnderstand</faultcode>
<faultstring>SOAP Must Understand Error</faultstring>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
范例10相似于范例2,但是掌控数据主体发生错误
HTTP/1.1 500 Internal Server Error
Content-Type:text/xml;charset="utf-8"
Content-Length:nnnn
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Server</faultcode>
<faultstring>Server Error</faultstring>
<detail>
<e:myfaultdetails xmlns:e="Some-URI">
<message>
My application didn 't work
</message>
<errorcode>
1001
</errorcode>
</e:myfaultdetails>
</detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
- SOAP1.1规范
- Axis2關於SOAP1.1和SOAP1.2
- SOAP1.1 与 SOAP1.2 区别总结
- Web-Service-SOAP1.1 vs SOAP1.2
- SOAP1.1和SOAP1.2的区别
- cxf生成endpoint,使用soap1.1和soap1.2
- webservice 中将soap1.1协议转换soap1.2协议
- 在WCF使用SOAP1.1
- 深入探索SOAP1.1--使用SAAJ1.2.1
- 深入探索SOAP1.1--使用SAAJ1.2.1
- SOAP1.1和1.2 深入解析WSDL
- WebService中SOAP1.1和1.2分析
- SOAP1.1和1.2 深入解析WSDL
- 深入探索SOAP1.1--使用SAAJ1.2.1(转)
- 用java实现简单快速的webservice客户端/数据采集器(支持soap1.1和soap1.2标准,支持utf-8编码)
- webservice 相关 http+SOAP 报文范例 ,以及 soap1.1 和 soap 1.2 的区别
- php使用SOAP1.2例子
- 使用 STHTTPRequest 框架解析 Soap1.2 教程
- 如何定时运行ASP文件
- ASP+FSO+框架实现ASP生成htm并分页的方法(批量)
- asp导入word和excel
- 创建一个ASP通用分页类
- 经典的存储过程的学习- -
- SOAP1.1规范
- 关于表单
- 判断多个文本框输入的数据是不是有重复(原创)
- 办公室人际关系的至尊宝典(转)
- 注册系统服务方法
- Windows编程高手请指教!
- 我有了自己的blog
- 我的CSDN博客诞生
- 转载--关于SQL Server中事务的理解