Listing 10代表的SOAP请求与Listing 4的请求基本相同,但Listing 10的开头加入了一些HTTP特有的代码。第一行代码表明这是一个遵循HTTP 1.1规范的POST请求,POST的目标是http://www.SmartHello.com/HelloApplication。下一行指示内容的类型,在HTTP消息中包含SOAP实体时,内容类型必须是text/xml。Content-Length指明了POST请求有效载荷的长度。
第四行是SOAP特有的,而且它是必不可少的。SOAPAction HTTP请求头指明了SOAP HTTP请求的目标,它的值是一个标识目标的URI。SOAP不对该URI的格式作任何限制,实际上,这个URI甚至不必对应某个实际的位置。
SOAPAction的一个可能的应用是,防火墙检查该请求头的值,决定是否允许请求通过防火墙。
一旦服务器处理完请求,它将向客户返回一个应答。应答的内容如Listing 11所示(假设没有出现错误):
Listing 11
HTTP/1.0 200 OK
Content-Type: text/xml; charset="utf-8"
Content-Length: 615
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="
http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="
http://www.w3.org/1999/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:sayHelloToResponse
xmlns:ns1="Hello"
SOAP-ENV:encodingStyle="
http://schemas.xmlsoap.org/soap/encoding/">
<return xsi_type="xsd:string">Hello John, How are
you doing?</return>
</ns1:sayHelloToResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
这个SOAP应答与Listing 5所显示的一样,但前面加上了一些HTTP特有的代码。由于没有出现错误,第一行代码显示应答状态是200。在HTTP协议中,200应答状态代码表示“一切正常”。如果在处理SOAP消息(Header区或者Body区)的时候出现了任何错误,则返回的状态代码将是500。在HTTP中,500状态代码表示“internal server error”。此时,上述SOAP应答的第一行代码将是:
HTTP 500 Internal Server Error
四、HTTP扩充框架
许多应用对服务的需求超过了传统HTTP提供的服务。其结果就是,这类应用扩充了传统的HTTP协议。然而,这种扩充是应用本身私有的。HTTP扩充框架试图确立一个通用的HTTP扩充机制,从而解决这个问题。HTTP扩充框架的扩充之一是增加了一个M-POST方法,其中的M表示Mandatory(必须遵循的,强制的)。如果一个HTTP请求包含至少一个强制的扩充声明,那么这个请求就称为强制的请求。引入强制的扩充声明通过Man或者C-Man头进行。强制请求的请求方法名字必须带有“M-”前缀,例如,强制的POST方法称为M-POST。
SOAP 1.0要求客户程序首先发送一个HTTP POST请求,只有当服务器返回错误510时才发送M-POST请求。SOAP 1.1不再对客户作这种限制,也就是说,SOAP 1.1允许客户从发送任何一种类型的请求开始。下面的请求就是迄今为止我们一直在讨论的那个请求,但它现在是M-POST格式:
Listing 12
M-POST http://www.SmartHello.com/HelloApplication HTTP/1.1
Content-Type: text/xml; charset="utf-8"
Content-Length: 587
Man: "http://schemas.xmlsoap.org/soap/envelope/"; ns=01
01-SOAPAction: "http://www.SmartHello.com/HelloApplication#sayHelloTo"
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="
http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="
http://www.w3.org/1999/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Header>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ns1:sayHelloTo
xmlns:ns1="Hello"
SOAP-ENV:encodingStyle="
http://schemas.xmlsoap.org/soap/encoding/">
<name xsi_type="xsd:string">Tarak</name>
</ns1:sayHelloTo>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
相关推荐
-
API设计:如何正确开发应用程序接口
在交互组件化软件的世界里,没有比让组件之间以及组件与移动设备和浏览器之间进行连接的应用程序接口(API)更重要的东西了。
-
REST vs. SOAP:如何挑选最好的Web服务
在应用没有任何服务器端的组件情况下,有没有可能直接通过我的应用数据库直接使用这些Web服务?
-
BEST:SOAP/XML和REST的替代方案
虽然拥有大量的机架服务器,以及大量软件开发人员的组织,基于web和集成服务的SOAP和REST很适合他们,但也会出现问题。
-
REST和SOAP 谁使移动应用最受益?
你应该听说过REST,如果在移动应用开发中使用REST,而不是使用SOAP,最大好处是什么?