⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 soap协议规范.htm

📁 internet协议集
💻 HTM
📖 第 1 页 / 共 5 页
字号:
        <BR>&lt;phoneNumber&gt;1-888-123-4567&lt;/phoneNumber&gt; 
        <BR>&lt;/phoneNumbers&gt; <BR>&lt;/xyz:Person&gt;</P></BLOCKQUOTE>
      <P>下面的例子中,数组值为single-reference,被编码为嵌入元素,包含它的元素名即为入口名:</P>
      <BLOCKQUOTE>
        <P>&lt;xyz:PurchaseOrder&gt; <BR>&lt;CustomerName&gt;Henry 
        Ford&lt;/CustomerName&gt; <BR>&lt;ShipTo&gt; <BR>&lt;Street&gt;5th 
        Ave&lt;/Street&gt; <BR>&lt;City&gt;New York&lt;/City&gt; 
        <BR>&lt;State&gt;NY&lt;/State&gt; <BR>&lt;Zip&gt;10010&lt;/Zip&gt; 
        <BR>&lt;/ShipTo&gt; <BR>&lt;PurchaseLineItems 
        SOAP-ENC:arrayType="Order[2]"&gt; <BR>&lt;Order&gt; 
        <BR>&lt;Product&gt;Apple&lt;/Product&gt; 
        <BR>&lt;Price&gt;1.56&lt;/Price&gt; <BR>&lt;/Order&gt; <BR>&lt;Order&gt; 
        <BR>&lt;Product&gt;Peach&lt;/Product&gt; 
        <BR>&lt;Price&gt;1.48&lt;/Price&gt; <BR>&lt;/Order&gt; 
        <BR>&lt;/PurchaseLineItems&gt; 
      <BR>&lt;/xyz:PurchaseOrder&gt;</P></BLOCKQUOTE>
      <H4>5.4.2.1 部分储值(partially transmitted)数组</H4>
      <P>SOAP提供了对部分储值(partially transmitted)数组的支持,如某些上下文中的可变数组。一个partially 
      transmitted 
      数组由一个"SOAP-ENC:offset"属性(从第一个transmitted的元素开始的偏移量,基于0)指示。如果省略,偏移量取0。下面的例子中数组的大小为5,但只有从0起,第三和第四个元素被储值。</P>
      <BLOCKQUOTE>
        <P>&lt;SOAP-ENC:Array ;SOAP-ENC:arrayType="xsd:string[5]" 
        ;SOAP-ENC:offset="[2]"&gt; <BR>&lt;item&gt;The third 
        element&lt;/item&gt; <BR>&lt;item&gt;The fourth element&lt;/item&gt; 
        <BR>&lt;/SOAP-ENC:Array&gt;</P></BLOCKQUOTE>
      <H4>5.4.2.2 稀疏数组Sparse Arrays</H4>
      <P>SOAP提供了对稀疏数组的支持。每个表示成员值的元素包含一个"SOAP-ENC:position"属性,用来指示它在数组中的位置。下例是两维字符串稀疏数组的例子,数组大小是4,但只用到第2个。</P>
      <BLOCKQUOTE>
        <P>&lt;SOAP-ENC:Array SOAP-ENC:arrayType="xsd:string[,][4]"&gt; 
        <BR>&lt;SOAP-ENC:Array href="#array-1" SOAP-ENC:position="[2]"/&gt; 
        <BR>&lt;/SOAP-ENC:Array&gt; <BR>&lt;SOAP-ENC:Array id="array-1" 
        SOAP-ENC:arrayType="xsd:string[10,10]"&gt; <BR>&lt;item 
        SOAP-ENC:position="[2,2]"&gt;Third row, third col&lt;/item&gt; 
        <BR>&lt;item SOAP-ENC:position="[7,2]"&gt;Eighth row, third 
        col&lt;/item&gt; <BR>&lt;/SOAP-ENC:Array&gt;</P></BLOCKQUOTE>
      <P>如果对array-1的引用仅发生在数组内部,上例也可以编码如下:</P>
      <BLOCKQUOTE>
        <P>&lt;SOAP-ENC:Array SOAP-ENC:arrayType="xsd:string[,][4]"&gt; 
        <BR>&lt;SOAP-ENC:Array SOAP-ENC:position="[2]" 
        SOAP-ENC:arrayType="xsd:string[10, 10]&gt; <BR>&lt;item 
        SOAP-ENC:position="[2,2]"&gt;Third row, third col&lt;/item&gt; 
        <BR>&lt;item SOAP-ENC:position="[7,2]"&gt;Eighth row, third 
        col&lt;/item&gt; <BR>&lt;/SOAP-ENC:Array&gt; 
        <BR>&lt;/SOAP-ENC:Array&gt;</P></BLOCKQUOTE>
      <H4>5.4.3 一般复合类型</H4>
      <P>在这里提到的编码规则不仅仅限于accessor名已知的情况,如果accessor名是运行环境下实时获得的,编码规则同样适用,也就是说accessor编码成一个元素名与accessor名匹配的元素,同时accessor可能包含或者引用该元素的值。如果accessor包含类型不能事先确定的值,它必须包含一个合适的属性xsi:type 
      。类似地,上述引用的规则已经足够用于复合类型的序列化,这些复合类型可能包含用名区分的accessors(结构)和用名及序数位置区分的accessors。(可能包含重复的accessor) 
      实际上这并不要求任何schema模式包含这些类型,但更为准确的说法是:一个类型模型(type-model)schema如果有这些类型,就可以构造一个符合XML句法规则的schema和XML文档实例。</P>
      <BLOCKQUOTE>
        <P>&lt;xyz:PurchaseOrder&gt; <BR>&lt;CustomerName&gt;Henry 
        Ford&lt;/CustomerName&gt; <BR>&lt;ShipTo&gt; <BR>&lt;Street&gt;5th 
        Ave&lt;/Street&gt; <BR>&lt;City&gt;New York&lt;/City&gt; 
        <BR>&lt;State&gt;NY&lt;/State&gt; <BR>&lt;Zip&gt;10010&lt;/Zip&gt; 
        <BR>&lt;/ShipTo&gt; <BR>&lt;PurchaseLineItems&gt; <BR>&lt;Order&gt; 
        <BR>&lt;Product&gt;Apple&lt;/Product&gt; 
        <BR>&lt;Price&gt;1.56&lt;/Price&gt; <BR>&lt;/Order&gt; <BR>&lt;Order&gt; 
        <BR>&lt;Product&gt;Peach&lt;/Product&gt; 
        <BR>&lt;Price&gt;1.48&lt;/Price&gt; <BR>&lt;/Order&gt; 
        <BR>&lt;/PurchaseLineItems&gt; 
      <BR>&lt;/xyz:PurchaseOrder&gt;</P></BLOCKQUOTE>
      <P>类似地,将一个结构上类似数组但实际上不是一个 SOAP-ENC:Array类型或者 
      SOAP-ENC:Array子类型的复合值序列化同样是允许的,例如:</P>
      <BLOCKQUOTE>
        <P>&lt;PurchaseLineItems&gt; <BR>&lt;Order&gt; 
        <BR>&lt;Product&gt;Apple&lt;/Product&gt; 
        <BR>&lt;Price&gt;1.56&lt;/Price&gt; <BR>&lt;/Order&gt; <BR>&lt;Order&gt; 
        <BR>&lt;Product&gt;Peach&lt;/Product&gt; 
        <BR>&lt;Price&gt;1.48&lt;/Price&gt; <BR>&lt;/Order&gt; 
        <BR>&lt;/PurchaseLineItems&gt;</P></BLOCKQUOTE>
      <H4>5.5 缺省值</H4>
      <P>省略accessor元素意味着或者有一个缺省值或者值不知道。具体细节依靠这个accessor,方法和上下文。例如,对于多态accessor,省略accessor一般意味着一个Null值。同样,省略布尔accessor一般意味着False值或者值不知道,省略数字accessor一般意味着值为零或者值不知道。</P>
      <H4>5.6 SOAP root属性</H4>
      <P>SOAP root 
      属性可用于标记一个序列化root,从而一个对象可以反序列化(deserialized),而实际上该root并不是真正的对象root。这个属性有两个可选值"1" 
      or "0"。对象真正的roots属性值为“1” 
      ,序列化root但不是真正的root属性值也为“1”,元素如果要显式地指定不能为序列化root,只需将该属性设置为“0” SOAP 
      root属性可以出现在SOAP头和SOAP体元素的任意子元素中。(译者注:SOAP 
      root属性为0的元素不是一个独立的实体,外部的应用不能访问到该元素,但该元素可以被SOAP文档本身的其它元素访问到)SOAP 
      root属性可以出现在SOAP头和SOAP体元素的任意子元素中。这个属性没有缺省值。</P>
      <H4>6. 在HTTP中使用SOAP</H4>
      <P>这一节讲述了如何在HTTP中使用SOAP。把SOAP绑定到HTTP,无论使用或不用HTTP扩展框架,都有很大的好处:在利用SOAP的形式化和灵活性的同时,使用HTTP种种丰富的特性。在HTTP中携带SOAP消息,并不意味着SOAP改写了HTTP已有的语义,而是将构建在HTTP之上SOAP语义自然地对应到HTTP语义。SOAP自然地遵循HTTP的请求/应答消息模型使得SOAP的请求和应答参数可以包含在HTTP请求和应答中。注意,SOAP的中间节点与HTTP的中间节点并不等同,即,不要期望一个根据HTTP连接头中的域寻址到的HTTP中间节点能够检查或处理HTTP请求中的SOAP消息。 
      <BR>在HTTP消息中包含SOAP实体时,按照RFC2376[3] HTTP应用程序必须使用媒体类型 "text/xml"。</P>
      <H4>6.1 SOAP HTTP请求</H4>
      <P>虽然SOAP可能与各种HTTP请求方式相结合,但是绑定仅定义了在HTTP 
      POST请求中包含SOAP消息。(第7节中描述了如何在RPC中使用SOAP,第6.3节描述了如何使用HTTP扩展框架)</P>
      <H4>6.1.1 HTTP头中SOAPAction域</H4>
      <P>一个HTTP请求头中的SOAPAction域用来指出这是一个SOAP 
      HTTP请求,它的值是所要的URI。在格式、URI的特性和可解析性上没有任何限制。当HTTP客户发出SOAP 
      HTTP请求时必须使用在HTTP头中使用这个域。</P>
      <P>soapaction = "SOAPAction" ":" [ &lt;"&gt; URI-reference &lt;"&gt; ] 
      <BR>URI-reference = &lt;as defined in RFC 2396 [4]&gt;</P>
      <P>HTTP头中SOAPAction域使服务器(如防火墙)能正确的过滤HTTP中SOAP请求消息。如果这个域的值是空字符串(""),表示SOAP消息的目标就是HTTP请求的URI。这个域没有值表示没有SOAP消息的目标的信息。例子:</P>
      <BLOCKQUOTE>
        <P>SOAPAction: "http://electrocommerce.org/abc#MyMessage" 
        <BR>SOAPAction: "myapp.sdl" <BR>SOAPAction: "" 
      <BR>SOAPAction:</P></BLOCKQUOTE>
      <H4>6.2 SOAP HTTP应答</H4>
      <P>SOAP HTTP遵循HTTP 
      中表示通信状态信息的HTTP状态码的语义。例如,2xx状态码表示这个包含了SOAP组件的客户请求已经被成功的收到,理解和接受。在处理请求时如果发生错误,SOAP 
      HTTP服务器必须发出应答HTTP 500 "Internal Server Error",并在这个应答中包含一个SOAP 
      Fault元素(见4.4节)表示这个SOAP处理错误。</P>
      <H4>6.3 HTTP扩展框架</H4>
      <P>一个SOAP消息可以与HTTP扩展框架 [6]一起使用以区分是否有SOAP 
      HTTP请求和它的目标。是使用扩展框架或是普通的HTTP关系到通信各方的策略和能力。通过使用一个必需的扩展声明和"M-"HTTP方法名前缀,客户可以强制使用HTTP扩展框架。服务器可以使用HTTP状态码510 
      "Not 
      Extended"强制使用HTTP扩展框架。也就是说,使用一个额外的来回,任何一方都可以发现另一方的策略并依照执行。用来表示SOAP使用了扩展框架的扩展标志符是:http://schemas.xmlsoap.org/soap/envelope/</P>
      <H4>6.4 SOAP HTTP举例</H4>
      <P>例3 使用POST的SOAP HTTP</P>
      <BLOCKQUOTE>
        <P>POST /StockQuote HTTP/1.1 <BR>Content-Type: text/xml; charset="utf-8" 
        <BR>Content-Length: nnnn <BR>SOAPAction: 
        "http://electrocommerce.org/abc#MyMessage" <BR>&lt;SOAP-ENV:Envelope... 
        <BR>HTTP/1.1 200 OK <BR>Content-Type: text/xml; charset="utf-8" 
        <BR>Content-Length: nnnn <BR>&lt;SOAP-ENV:Envelope... </P></BLOCKQUOTE>
      <P>例4 使用扩展框架的SOAP HTTP</P>
      <BLOCKQUOTE>
        <P>M-POST /StockQuote HTTP/1.1 <BR>Man: 
        "http://schemas.xmlsoap.org/soap/envelope/"; ns=NNNN <BR>Content-Type: 
        text/xml; charset="utf-8" <BR>Content-Length: nnnn <BR>NNNN-SOAPAction: 
        "http://electrocommerce.org/abc#MyMessage" <BR>&lt;SOAP-ENV:Envelope... 
        <BR>HTTP/1.1 200 OK <BR><BR>Ext: <BR>Content-Type: text/xml; 
        charset="utf-8" <BR>Content-Length: nnnn 
      <BR>&lt;SOAP-ENV:Envelope...</P></BLOCKQUOTE>
      <H4>7. 在RPC中使用SOAP</H4>
      <P>设计SOAP的目的之一就是利用XML的扩展性和灵活性来封装和交换RPC调用。这一节定义了远程过程调用和应答的统一表示形式。虽然可以预计到这种表示形式最可能被用于与第5节中定义的编码方式相结合,但也可能有其它的表示形式。SOAP的encodingStyle属性(见4.3.2节)可以用来表明方法调用和应答都使用这一节所指定的表示方式。在RPC中使用SOAP和SOAP协议绑定(见第6节)是紧密相关的。在使用HTTP作为绑定协议时,一个RPC调用自然地映射到一个HTTP请求,RPC应答同样映射到HTTP应答。但是,在RPC中

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -