Web Services(三)

2006-10-21:
第三章:soap實質
soap是一個基於xml的協議,用來在計算機之間交換信息。雖然soap能夠被用於不同的消息系統,通過不同的傳輸協議傳輸,但是soap最初關注的是rpc服務和調用遠程方法。
其他的架構,包括corba,dcom和java的rmi,提供了與soap相同的功能,但是soap的消息完全用xml寫成。
soap因此代表了web service體系結構的基礎。
3.1soap101
soap的規範定義了下面的主要部分:
soap封包的規範:定義了特殊的規則,來封裝數據。包括程序細節的數據,比如方法的名稱,方法參數,或者返回值。還包含誰處理封包的內容和怎樣編碼錯誤信息。
數據編碼規則:比如,你要處理股票報價,需要一個規則來編碼浮點數據類型;soap包含了自己的一套約定。大多數是基於w3c xml schema規範的。
rpc約定:
3.1.1soap請求
3.1.2soap響應
3.2soap消息
下面是關於soap規範本身。
3.2.1Envelope
每個soap消息都有一個根元素Envelope,不像其他規範,比如HTTP和XML,soap沒有定義一個傳統的版本模型。soap是使用命名空間來區別不同的版本的。soap1.1命名空間必須是xmlsoap的那個URI,soap1.2必須是w3的URI。如果有其他的命名空間,將會出現版本錯誤。
3.2.2Header
這個是可選的,提供了一個靈活的架構,來詳細說明額外的程序級的需求。比如,用來指明一個數字簽名,來保護服務;另外,可以指明一個帳號,來支持單用戶soap服務。
3.2.3Body
3.2.4Fault
3.3soap編碼
soap包含了一個內置的規則來爲數據類型編碼。這個能使soap消息顯示特殊的數據類型。
xml1.0規範沒有包含數據類型編碼規範。因此soap最初不得不定義自己的數據編碼規範。soap採用了xml schema規範,但是自己也定義了自己的結構,比如數組和引用。
soap數據類型被分爲了兩大目錄:scalar類型和複合類型。scalar類型包含了一個確切的值,比如一個last name,價格或者是產品描述。複合類型包含了多個值,比如一個purchase order,或者是a list of股票。複合類型還分爲數組和結構體。
soap的消息的編碼樣式通過soap-env:encodingStyle屬性來設置。xmlsoap是soap1.1的,w3是soap1.2的
3.3.1scalar類型
採用了xml schema的規範中的簡單數據類型。
3.3.2複合類型
關於soap toolkit,每個toolkit實現的細節不一樣。
指定xsi:type爲Array,來建立數組

06-10-25:
3.3.3literal編碼
就像前面提到的,你不需要使用soap編碼風格。事實上,你可以完全的忽略soap編碼規則,而嵌入一個完整的xml文檔到你的soap消息中。要這樣做,需要參考literal xml,然後指定一個literal xml編碼風格。
3.4通過http的soap
soap與任何的傳輸協議無關。但是soap規範僅僅包含了HTTP上面的細節,http仍然是最流行的soap傳輸協議。注意HTTP的請求和響應都需要設置他們的text/xml content類型。
作爲額外的需求,客戶端必須指明soapAction頭部。用來指明請求的意圖,用來快速的決定soap請求的這個屬性,而不用檢查soap消息的其他的信息。
儘管服務器不需要完全的soapAction,客戶端也必須標識一個空串,或者是null。
soap響應需要http狀態碼,比如200 ok標識了一個成功的響應。
soap1.2把soapAction的狀態從必須轉到了option。
3.5soap和w3c
3.6soap的實現
3.6.1soap互用性
soap互用性表現在兩個方面:1.最重要的是soap仍然是在它的幼年。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章