日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SOAP 1.1 - 学习

發布時間:2023/11/30 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SOAP 1.1 - 学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SOAP 1.1 --- 每天發送SOAP request,不搞明白啥叫SOAP,慚愧

SOAP 1.1 XML 架構定義

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://schemas.xmlsoap.org/soap/envelope/" targetNamespace="http://schemas.xmlsoap.org/soap/envelope/" ><!-- Envelope, header and body --><xs:element name="Envelope" type="tns:Envelope" /><xs:complexType name="Envelope" ><xs:sequence><xs:element ref="tns:Header" minOccurs="0" /><xs:element ref="tns:Body" minOccurs="1" /><xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /></xs:sequence><xs:anyAttribute namespace="##other" processContents="lax" /></xs:complexType><xs:element name="Header" type="tns:Header" /><xs:complexType name="Header" ><xs:sequence><xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" /></xs:sequence><xs:anyAttribute namespace="##other" processContents="lax" /></xs:complexType><xs:element name="Body" type="tns:Body" /><xs:complexType name="Body" ><xs:sequence><xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax" /></xs:sequence><xs:anyAttribute namespace="##any" processContents="lax" /></xs:complexType><!-- Global Attributes --><xs:attribute name="mustUnderstand" default="0" > <xs:simpleType><xs:restriction base='xs:boolean'><xs:pattern value='0|1' /></xs:restriction></xs:simpleType></xs:attribute><xs:attribute name="actor" type="xs:anyURI" /><xs:simpleType name="encodingStyle" ><xs:list itemType="xs:anyURI" /></xs:simpleType><xs:attribute name="encodingStyle" type="tns:encodingStyle" /><xs:attributeGroup name="encodingStyle" ><xs:attribute ref="tns:encodingStyle" /></xs:attributeGroup><xs:element name="Fault" type="tns:Fault" /><xs:complexType name="Fault" final="extension" ><xs:sequence><xs:element name="faultcode" type="xs:QName" /><xs:element name="faultstring" type="xs:string" /><xs:element name="faultactor" type="xs:anyURI" minOccurs="0" /><xs:element name="detail" type="tns:detail" minOccurs="0" /> </xs:sequence></xs:complexType><xs:complexType name="detail"><xs:sequence><xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax" /></xs:sequence><xs:anyAttribute namespace="##any" processContents="lax" /> </xs:complexType></xs:schema>

如果檢查一下?Envelope?的?complexType?定義,你很快就能了解這些元素相互之間是如何關聯的。 以下消息模板說明了 SOAP Envelope 的結構:

<soap:Envelopexmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Header> <!-- optional --><!-- header blocks go here... --></soap:Header><soap:Body><!-- payload or Fault element goes here... --> </soap:Body> </soap:Envelope>

Envelope?元素始終是 SOAP 消息的根元素。 這就便于應用程序識別“SOAP 消息” — 只要檢查一下根元素的名稱即可。 通過檢查 Envelope 元素的命名空間,應用程序也可確定所使用的 SOAP 版本。

Envelope 元素包含一個可選的?Header?元素(有關詳細信息,參見可擴展性一節),后跟一個必要的?Body?元素。 Body 元素代表了該消息的有效內容。 它是一種通用容器,因為它可包含來自任何命名空間的任意數量的元素。 這就是試圖發送數據的最終目的地。

例如,以下的 SOAP 消息代表了一個在銀行帳戶之間轉帳的請求:

<soap:Envelopexmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><x:TransferFunds xmlns:x="urn:examples-org:banking"><from>22-342439</from><to>98-283843</to><amount>100.00</amount></x:TransferFunds></soap:Body> </soap:Envelope>

如果接收方支持請求/響應,且能夠成功地處理該消息,它應向最初的發送方返回另一條 SOAP 消息。 在這種情況下,響應信息也應包含在 Body 元素中,如下例所示:

<soap:Envelopexmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><x:TransferFundsResponsexmlns:x="urn:examples-org:banking"><balances><account><id>22-342439</id><balance>33.45</balance></account><account><id>98-283843</id><balance>932.73</balance></account></balances></x:TransferFundsResponse></soap:Body> </soap:Envelope>

該消息處理框架還定義了一個名為Fault?的元素,用于在發生錯誤時在 Body 元素中表示錯誤。 這是不可缺少的,因為如果沒有一種標準的錯誤表示方法,每個應用程序將不得不自己創建,從而使得通用基礎結構不可能區分成功和失敗。 以下示例 SOAP 消息中包含了一個 Fault 元素,指明在處理該請求時發生了“Insufficient Funds(資金不足)”錯誤:

<soap:Envelopexmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><soap:Fault><faultcode>soap:Server</faultcode><faultstring>Insufficient funds</faultstring><detail><x:TransferError xmlns:x="urn:examples-org:banking"><sourceAccount>22-342439</sourceAccount><transferAmount>100.00</transferAmount><currentBalance>89.23</currentBalance></x:TransferError></detail></x:TransferFunds></soap:Body> </soap:Envelope>

Fault 元素必須包含一個?faultcode,后跟一個?faultstring?元素。 faultcode 元素使用一種符合命名空間的名稱對錯誤進行分類,而 faultstring 元素提供一種對錯誤可讀的解釋(類似于 HTTP 的工作方式)。 表 2 簡要地說明了 SOAP 1.1 所定義的各種錯誤碼(所有這些代碼都包含在http://schemas.xmlsoap.org/soap/envelope/?命名空間中)。

Fault 元素也可能包含一個 detail 元素,以便提供該錯誤的細節,這樣可以幫助客戶端診斷問題,特別是在 Client 和 Server 錯誤碼的情況下。

表 2. SOAP 1.1 錯誤碼

名稱

  • VersionMismatch

  • MustUnderstand

  • Client

  • Server

含義

  • 處理方發現 SOAP?Envelope?元素的命名空間是無效的。

  • 處理方沒有理解或服從 SOAP Header 元素的某個直接子元素,而該子元素包含一個值為 "1" 的 SOAPmustUnderstand?屬性。

  • Client?類的錯誤表明消息的格式錯誤或者不包含適當的信息,因而不能成功。 這通常表明,如果不對該消息做出更改,就不應該重發該消息。

  • Server?類的錯誤表明該消息未能得到處理的原因與消息的內容并沒有直接關系,而是跟該消息的處理有關。 例如,處理過程可能包括與某個上游處理器的通信,但該處理器沒有響應。 如果在稍后重發,該消息可能會成功。

現在,假設你想在初始的消息中增加一些驗證信息,以便接收方能夠確定發送方是否有足夠的權限來執行傳輸。 要達到這一目的,一種方法就是在主體中添加憑證信息,如下所示:

<soap:Envelopexmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><x:TransferFunds xmlns:x="urn:examples-org:banking"><from>22-342439</from><to>98-283843</to><amount>100.00</amount><!-- security credentials --><credentials><username>dave</username><password>evad</password></credentials></x:TransferFunds></soap:Body> </soap:Envelope>

如果使用這種方法,每項需要驗證的操作都必須處理這些憑證。 這也意味著其他需要安全性的應用程序必須開發自己的解決方案以解決這個問題;歸根結底,這將損害互操作性。 對于諸如安全性等公共需要,定義各方都同意的標準 SOAP 標頭將更有意義。 然后,各廠商可以在其通用的 SOAP 基礎結構中建立對擴展功能的支持,這樣各方皆贏。 這種方法可提高開發人員的生產力,同時有助于確保更高級別的互操作性。 而這正是 SOAP 擴展性模型設計要實現的目標。

轉載于:https://www.cnblogs.com/jack_at_blog/archive/2013/03/02/2939819.html

總結

以上是生活随笔為你收集整理的SOAP 1.1 - 学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。