SOAP知识摘要和注意点(二)

    六、SOAP的消息传递模式

            SOAP共支持四种消息传递模式:RPC/Literal 、Document/Literal 、RPC/Encoded 和Document/Encoded模式。常用的是前两种模式,而且WEB SERVICE也只支持前两种。

           1、Document/Literal 消息传递模式

例如: <soapenv:Envelope xmlns:soapenv=
                        "http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Body>
    <p582:op2 xmlns:p582="http://apiNamespace.com">
      <in>
        <data1>3</data1>
        <data2>4</data2>
      </in>
    </q0:op2>
  </soapenv:Body>
</soapenv:Envelope>

<soapenv:Envelope xmlns:soapenv=
"http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Body>
    <p582:op2Response xmlns:p582="http://apiNamespace.com">
      <op2Return>
        <data1>300</data1>
        <data2>400</data2>
      </op2Return>
    </p582:op2Response>
  </soapenv:Body>
</soapenv:Envelope>

SOAP的Body元素包含一个XML文档段,该文档段是一个格式良好的XML元素,它包含独立于SOAP消息的属于XML模式和名称空间的任意应用程序(文本和其他元素)。

           2、RPC/Literal 消息传递模式

            例如:<soapenv:Envelope xmlns:soapenv=
                        "http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Body>
    <op3>
      <p10:DataElem xmlns:p10=
      "http://dataNamespace.com">
        <data1>5</data1>
        <data2>6</data2>
      </p10:DataElem>
      <in2>
        <p971:RefDataElem xmlns:p971=
        "http://refNamespace.com">7</p971:RefDataElem>
      </in2>
    </op3>
  </soapenv:Body>
</soapenv:Envelope>

RPC/Literal 消息传递模式与Document/Literal消息传递模式不同,后者并不会假设在消息的Body元素内包含元素的类型与结构(但文档要遵循一些XML模式)。前者要携带一些简单的参数。RPC样式的消息传递是分布式技术中常用的方式,其中包括EJB、CORBA、DCOM等。所以SOAP为RPC样式的消息传递定义了一个标准的XML格式,即RPC/Literal传递。

另外两种消息传递模式不常用,且WS BP1.0也不支持,所以就不写了。

七、SOAP错误

        错误元素包括:faultcode元素、 faultString元素、 faultactor元素、 detail元素。

       例如:<?xml version="1.0"?>
<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Fault>
  <faultcode>soap:Server</faultcode>
  <faultstring>XML for Analysis 提供程序遇到错误</faultstring>
  <faultactor>XML for Analysis Provider</faultactor>
  <detail>
   <faultstring>
    <Error
    ErrorCode="2147483653"
    Description="出现意外的错误。"
    Source="XML for Analysis Provider"
    HelpFile=""
    />
   </faultstring>
  </detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Envelope>

         1、SOAP faultcode元素

            顾名思义就是SOAP错误代码,一看就知道是用来表示错误类型的。

错误类型表示错误来源 
Client错误soap:Client传递SOAP消息的节点出现错误 
Server错误soap:Server收到SOAP消息的节点发生故障或不能处理SOAP消息。 
VersionMismatch错误soap:VersionMismatch接收节点不能识别SOAP消息的Envelope元素的命名空间 
MustUnderstand错误soap:MustUnderstand消息文件头指向当前节点,并将MustUnderstand属性设置为“1”,但是当前节点不能识别该文件头 

        2、faultString元素

           faultString元素是强制元素,也就是说,每个SOAP fault元素必须包含一个faultString子元素。可以通过元素属性 xml:lang="  "来指明faultString的语言类型。例如:xml:lang="es"表示描述字符串是意大利语。

        3、faultactor元素

             faultactor元素表示遇到了错误并产生了错误的节点。如果错误是一个中介体(即中间节点),那么需要使用faultactor元素,但如果错误节点是最终接收方,则该元素可有可无。

        4、detail元素

              如果Body元素的内容产生了一个错误,则必须包含错误消息的detail元素,但如果当处理文件头时发生了错误,则不能包含该元素。使用空detail元素是合法的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值