第 12 章 SOAP技術
簡介SOAP - 什麼是SOAP SOAP的英文全名為Simple Object Access Protocol,譯為簡單物件存取協定,W3C已於1999年12月10日認可SOAP 1.0版本為推薦標準,而最新的1.1版與1.2版也正在討論中。 SOAP是一個以XML資料格式為基礎的分散式系統資料交換通訊協定,運用SOAP可解決分散式系統執行遠端程序呼叫(Remote Procedure Call,簡稱RPC)時,資料交換的問題。 所謂的分散式系統,意指整套系統的執行,將由位於不同伺服器上的元件(程式)分工合作完成。在整個分工合作的過程中,呼叫其他伺服器上的元件,執行任務的機制,即稱之為遠端程序呼叫。
簡介SOAP - 什麼是SOAP 在分散式系統的發展過程裡,遠端程序呼叫技術遇到了以下問題: 不同元件間所使用之資料交換的格式、型態可能不一致,修改時,呼叫者與被呼叫者需同時修改。 透過網路傳遞資料時,需使用特定的連結埠(port),訊息可能被防火牆(firewall)攔阻。
簡介SOAP - 什麼是SOAP SOAP擁有以下特性可解決上述問題成為更優良的遠端程序呼叫協定: SOAP傳遞的資料內容,符合XML格式,擁有良好的擴充性,並可運用DTD或XML Schema做驗證,運用XSL執行轉換。 SOAP使用XML Schema定義的資料標準,統一了資料交換使用的資料型態。 SOAP傳遞資料時,將使用HTTP通訊協定,傳遞純文字資料,可輕易通過防火牆。 SOAP是資料量很少的協定,可以減輕伺服端的負擔
簡介SOAP - SOAP標準的內容概要 本章內容將以SOAP 1.1版為依據,該標準文件的網址為http://www.w3.org/TR/SOAP/#_Toc478383512,內容包含以下三個部份: SOAP信封袋(envelope) 編碼規則 SOAP訊息的請求與回應
SOAP訊息的語法 - SOAP訊息的基本語法
SOAP訊息的語法 - SOAP訊息的基本語法 SOAP訊息不可包含文件型態宣告(Document Type Declaration) SOAP訊息不可包含處理指令(Processing Instructions) 整個SOAP訊息,將由以下三個元素構成。 Envelope元素 – SOAP訊息的根元素。 Header元素 – Envelope元素的選擇性子元素,內容將定義標頭資料。 Body元素 – Envelope元素的必要子元素,內容將定義標頭資料。
SOAP訊息的語法 - SOAP訊息的基本語法 Envelope元素 Envelope元素為SOAP訊息的根元素。該元素的標籤內,必須定義SOAP訊息內的元素,使用『http://schemas.xmlsoap.org/soap/envelope/』為名稱空間,以及該名稱空間使用的字頭,前面的訊息範例使用的是SOAP-ENV,當然您亦可自訂類似的字頭,如:SOAP。並定義『http://schemas.xmlsoap.org/soap/encoding/』為SOAP訊息使用編碼與資料型態的名稱空間
SOAP訊息的語法 - SOAP訊息的基本語法 Header元素 Header元素為Envelope元素的選擇性子元素,若SOAP訊息內欲包含Header子元素時,必須為Envelope元素的第1個子元素。此元素的內容,將包含呼叫遠端程序時,遠端程序所接受資料以外,用於描述呼叫動作的相關資料。Header元素所包含的子元素,必須自行定義名稱空間以及使用的字頭。以下敘述內的Transaction元素與t字頭代表的名稱空間,即為使用者自訂。
SOAP訊息的語法 - SOAP訊息的基本語法 Body元素 Body元素為Envelope元素的必要子元素,將包含SOAP訊息的主要內容,對於Body元素所包含的內容,並沒有強制規範,以下將依照SOAP 1.0版標準提供訊息範例的習慣,依照訊息功能的類型分別說明如下: SOAP請求訊息
SOAP訊息的語法 - SOAP訊息的基本語法
SOAP訊息的語法 - SOAP訊息的基本語法 SOAP錯誤訊息 SOAP錯誤訊息的Body元素內,僅可包含一個Fault子元素,該元素還可包含以下子元素。
SOAP訊息的語法 - SOAP訊息的基本語法
SOAP訊息的語法 - 傳遞SOAP請求訊息的HTTP標頭 遠端程式的位址 + # + 程序名稱 下述SOAPAction標頭欄位將指出SOAP請求訊息,呼叫位於http://www.bitc.com.tw/getBookData.asp位址的getNewBook程序。
運用SOAP執行遠端程序呼叫 - SOAP訊息的遠端呼叫的執行流程
運用SOAP執行遠端程序呼叫 - SOAP訊息的遠端呼叫的執行流程
運用SOAP執行遠端程序呼叫 - SOAP訊息的遠端呼叫的執行流程 設定SOAPAction自訂標頭,請參考以下敘述:
運用SOAP執行遠端程序呼叫 - SOAP訊息的遠端呼叫的執行流程 從HTTP請求取得SOAPAction標頭,以下敘述將利用Request物件的ServerVariables方法,取得SOAPAction標頭的內容,由於SOAPAction資料的格式為『遠端程式的位址 + # +程序名稱』,取得標頭內容後可再利用VBScript的字串函數,取出欲呼叫的遠端程序名稱。
運用SOAP執行遠端程序呼叫 - SOAP訊息的遠端呼叫的執行流程 從Request物件載入,客戶端傳遞過來包含SOAP訊息的DOM物件,並取得包含傳遞給欲呼叫程序參數的Body元素。 除了從Body元素的子元素取得傳遞給程序的參數外,還可視情況取得這些子元素所使用名稱空間的字頭與位址,這些資料在完成程序執行傳回SOAP訊息時,將會用到。
運用SOAP執行遠端程序呼叫 - SOAP訊息的遠端呼叫的執行流程 執行程序呼叫,使用VBScript語法時,可將取得的遠端程序名稱以及參數,建立為呼叫遠端程序的字串,再由eval函數執行呼叫動作。 以執行結果建立正確的SOAP回應訊息
運用SOAP執行遠端程序呼叫 - SOAP遠端程序呼叫的網頁程式設計模組 客戶端模組的介紹 客戶端模組的檔案為SOAPClient.js,將執行以下動作: SOAPAction標頭的建立 SOAP請求訊息的建立 請求訊息的發出 取得遠端程序的回傳值
運用SOAP執行遠端程序呼叫 - SOAP遠端程序呼叫的網頁程式設計模組 伺服端模組的介紹 伺服端模組的檔案為SOAPServer.asp,將執行以下動作: 取得並解析SOAPAction標頭,擷取欲呼叫方法的名稱 從SOAP請求訊息取得傳入的參數 執行程序的呼叫 傳回執行結果 若發生錯誤傳回錯誤訊息
運用SOAP執行遠端程序呼叫 - SOAP的資料格式 簡單資料型別 SOAP的簡單資料型別採用了XML Schema Part 2 : Datatypes規範內,所有內建的資料類型,包含了整數、浮點數、字串、位元組陣列以及列舉型態…等。以下是一個宣告與驗證SOAP訊息內,傳遞型別為簡單資料型別的參數之Schema文件的片段。
運用SOAP執行遠端程序呼叫 - SOAP的資料格式 以下則為符合上述Schema驗證,SOAP訊息內有關參數傳遞的部份內容。
運用SOAP執行遠端程序呼叫 - SOAP的資料格式 複合資料型別 複合資料型別則針對程式設計時,所使用到的資料結構,如:程式內常見資料結構有陣列(Array)與結構(Struct)。下面是SOAP訊息內傳遞,型別為複合資料型別,用於描述書籍資料的結構參數。 以下則是描述此參數的Schema。