让我们返回“Hello”实例,为它加上一个假想的约束,即“在星期二向别人说Hello不合法。”因此,星期二的时候,即使发送给服务器的请求是合法的,服务器也会把一个错误信息返回给客户端。应答内容将如下所示:
Listing 7
<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="Hello">
<message>
Sorry, my silly constraint says that I cannot say hello on Tuesday.
</message>
<errorcode>
1001
</errorcode>
</e:myfaultdetails>
</detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
我们来分析一下http://schemas.xmlsoap.org/soap/envelope/名称空间定义的Fault元素。Fault元素总是Body元素的直接子元素,所有的SOAP服务器必须始终通过该元素报告所有错误情况。Fault元素必须包含faultcode和faultstring元素,不能有例外。faultcode是一个能够标识问题的代码;客户程序按照SOAP规范的要求利用faultcode进行算法处理。SOAP规范定义了一小组错误代码供用户使用。另一方面,faultstring是供人类阅读的错误信息。
Listing 7的代码还包含了一个detail元素。由于错误在处理SOAP消息的Body区时出现,detail元素必须出现。正如你将在本文后面看到的,如果错误在处理Header区时出现,detail元素不应出现。在Listing 7中,应用利用detail元素提供当前错误更详细、更自然的解释,即星期二不允许说Hello。SOAP还提供另外一个面向具体应用的错误代码,即半可选的faultfactor元素,但上面的错误信息中没有显示这个元素。之所以称这个元素是半可选的,是因为如果错误消息不是由请求最终处理点的服务器发送,即由一个中间服务器发送,则错误消息必须包含该元素。SOAP对faultcode元素不应出现的情形没有作任何规定。
在Listing 7中,错误起源于方法调用本身,处理该方法的应用导致了这个错误。现在,我们来看一下另一种类型的错误,这种错误由于服务器不能处理请求头信息而导致。举例来说,假设所有的Hello消息必须在一个事务环境之内生成,则请求类似于:
Listing 8
<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>
<t:Transaction xmlns_t="some-URI"
SOAP-ENV:mustUnderstand="1">
5
</t:Transaction>
</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,最大好处是什么?