SOAP Version 1.2中文手冊(5)-xml教程
转载自:互联网 作者:cd3c.com
您正在看的xml教程是:SOAP Version 1.2中文手冊(5)。6. 在HTTP中使用SOAP
本节描述了如何在使用或不使用HTTP Extension Framework的前提下将SOAP与HTTP的协同工作机制。将SOAP绑定在HTTP上可以利用HTTP丰富的特性集,提供使用SOAP形式方法和分布适应性的优点。将SOAP在HTTP上传输并不以为着SOAP可以完全超越HTTP的语义,更恰当的描述应当是SOAP的语义通过HTTP的映射而很自然地成为HTTP的语义。
SOAP很自然地利用HTTP的请求/响应消息模型,将SOAP请求的参数放在HTTP请求里,而将SOAP响应的参数放在HTTP响应里面。注意,无论如何,SOAP的中间介与HTTP中间介是不同的。也就是说,根据HTTP Connection头字段来寻址的HTTP中间介一般并不能来处理HTTP请求中的SOAP实体体。
当需要将SOAP消息体包含在HTTP消息中时,HTTP应用程序必须依照RFC2376[3]使用媒体类型“text/XML”。
6.1 SOAP HTTP请求
虽然SOAP可以和多种HTTP请求方法联合使用,但这里的绑定只定义了SOAP是如何在HTTP Post请求中传输的。(可参阅section 7了解如何在RPC中使用SOAP,以及section 6.3如何使用HTTP Extension Framework)
6.1.1 HTTP Header中的SOAPAction字段
SOAPAction HTTP请求头字段(header field)可以用于指示SOAP HTTP请求的目的。它的值是一个标识该目的的URI。SOAP对于格式上并没有严格的限制,同时对URI的描述以及是否要是可解析的都没有严格的限制。当发出SOAP HTTP请求时,HTTP客户必须使用该头字段。
soapaction
=
"SOAPAction" ":" [ <"> URI-reference <"> ]
URI-reference
=
SOAPAction头字段的存在及其内容可以被服务器例如防火墙用于在HTTP中过滤SOAP请求消息。当该字段的值为空字符串( “”)时,则意味着SOAP消息的目的由HTTP Request-URI来提供。而如果没有值则表示对消息的目的没有指示。
例如:
Example 42
SOAPAction: "http://electrocommerce.org/abc#MyMessage"
SOAPAction: "myapp.sdl"
SOAPAction: ""
SOAPAction:
Examples of values for SOAPAction
6.2 SOAP HTTP响应
在HTTP之上的SOAP遵从用于在HTTP中表示通讯状态的HTTP状态代码的语义。例如,2xx状态代码表明这是客户端包含SOAP构件的请求被成功的接收、理解和接受等等。
当处理请求的时候发生SOAP错误的时候,SOAP HTTP服务器必须发出一个HTTP 500 “Internal Server Error”响应同时在包含于该响应的SOAP消息中应包含一个SOAP Fault元素(参阅 section 4.4)来指明SOAP处理的错误。
6.3 HTTP扩展框架
SOAP消息可以与HTTP Extension Framework[6]一起使用来标识SOAP HTTP请求的出现和意图。
是使用Extension Framework还是使用简单HTTP对于通讯各方而言是一个策略及能力的问题。客户端可以通过一个强制扩展声明以及一个“M-”HTTP方法名前缀来强制使用HTTP Extension Framwork。服务器端可以通过使用 510 “Not Extended” HTTP状态代码来强制使用HTTP Extension Framework。也就是说,通过一次额外的环游,每个通讯方都可以检测到其他通讯方和因此的动作。
用于使用Extension Framework标识SOAP的扩展标识是:
http://www.w3.org/2001/06/soap-envelope
6.4 SOAP HTTP示例
Example 43
POST /StockQuote HTTP/1.1
Content-Type: text/XML; charset="utf-8"
Content-Length: nnnn
SOAPAction: "http://electrocommerce.org/abc#MyMessage"
. . .
SOAP HTTP Request Using POST
Example 44
HTTP/1.1 200 OK
Content-Type: text/XML; charset="utf-8"
Content-Length: nnnn
. . .
SOAP HTTP Response to Example 43
Example 45
M-POST /StockQuote HTTP/1.1
Man: "http://www.w3.org/2001/06/soap-envelope"; ns=NNNN
Content-Type: text/XML; charset="utf-8"
Content-Length: nnnn
NNNN-SOAPAction: "http://electrocommerce.org/abc#MyMessage"
. . .
SOAP HTTP Request using the experimental HTTP Extension Framework
Example 46
HTTP/1.1 200 OK
Ext:
Content-Type: text/XML; charset="utf-8"
Content-Length: nnnn
. . .
SOAP HTTP Response to Example 45
7. 在RPC中使用SOAP
SOAP的一个设计目标就是要利用XML的可扩展性和可伸缩性来包装和交换RPC调用。本节定义了一个统一的远程过程调用和响应的表示。
其实我们也可以预想到在RPC环境下的表示很可
[1] [2] 下一篇
