Microsoft SOAP Toolkit 2.0介紹 (轉)

來源:互聯網
上載者:User
雖然關於SOAP的實現目前有很多種,但是我認為對於VC/VB程式員來說,選擇Microsoft的實現是最好的。先撇開.NET的WebServices的底層庫不談(因為還不熟悉L),我們現在要討論的是Microsoft Soap Toolkit 2.0。

Microsoft Soap Toolkit 2.0提供了一整套的COM對象來處理與SOAP相關的所有資料,可以讓你在不瞭解SOAP和XML的情況下(當然最好還是瞭解的啦),也可以很容易和方便的使用任何一種程式設計語言來編寫SOAP應用。你看到的,就是一個個的COM對象(符合微軟的風格,符合一般程式員的編程習慣)。

一. 功能簡介:

1. 提供了用戶端的組件,可以讓你指定WSDL,然後輕鬆調用對應的Web Service。

2. 提供了服務端的組件,可以讓你指定WSDL、WSML和COM對象,自動為你產生Web Service。

3. 還提供了底層的處理組件,可以讓你操縱SOAP訊息的具體建立、處理和傳輸的過程。


二. 幾個概念:

WSDL(Web Services Description Language):用於描述服務端所提供服務的XML格式。WSDL檔案裡,描述了服務端提供的服務,提供的調用方法,以及調用時所要遵循的格式,比如調用參數和傳回值的格式等等。WSDL 很像COM編程裡的IDL(Interface Description Language),是伺服器與用戶端之間的契約,雙方必須按契約嚴格行事才能實現功能。
WSML(Web Services Meta Language): 用於描述WSDL裡提供的方法與實現該方法的COM對象之間的映射關係。該檔案是Microsoft的實現中特有的,不是SOAP標準的一部分。一般情況下,該檔案只在服務端存在。
SOAP訊息:用戶端和服務端之間的方法調用請求和結果傳回值都放在這些訊息裡,是XML格式的資料。

三. Web Service調用過程:

用戶端:取得服務端的服務描述檔案WSDL,解析該檔案的內容,瞭解服務端的服務資訊,以及調用方式。根據需要,產生恰當的SOAP請求訊息(指定調用的方法,已經調用的參數),發往服務端。等待服務端返回的SOAP回應訊息,解析得到傳回值。
服務端:產生服務描述檔案,以供用戶端擷取。接收用戶端發來的SOAP請求訊息,解析其中的方法調用和參數格式。根據WSDL和WSML的描述,調用相應的COM對象來完成指定功能,並把傳回值放入SOAP回應訊息返回給使用者。
四. 編程的兩種模式
高層介面
使用高層介面,你不需要知道SOAP和XML的任何資訊,就可以產生和使用一個WebService。Soap Toolkit 2.0通過提供兩個COM對象――SoapClient和SoapServer,來完成這些功能。
在用戶端,你只需要產生一個SoapClient執行個體,並用WSDL作為參數來調用其中的mssoapinit方法。SoapClient對象會自動解析WSDL檔案,並在內部產生所有Web Service的方法和參數資訊。之後,你就可以像調用IDispatch介面裡的方法一樣,調用裡面所有的方法。在VB或是指令碼語言裡,你甚至可以直接在SoapClient對象名後面直接加上.方法(參數…)進行調用。
在服務端,有兩種處理模式。一種是產生ASP檔案;另一種是直接使用ISAPI擴充,讓Soap Toolkit提供的DLL來處理對WSDL的請求。
在第一種模式中,你需要在ASP檔案裡建立SoapServer對象,並用WSDL和WSML作為參數來調用Init方法,SoapServer在內部會自動建立相關的映射關係。然後,用ASP的Request和Response對象作為參數調用SoapInvoke方法。SoapServer會自動從Request裡取得使用者的SOAP請求訊息,並解析,調用相應的COM完成功能,把傳回值封裝成SOAP回應訊息,通過Response對象返回。
在第二種模式中,Soap Toolkit提供的ISAPI擴充會自動完成以上ASP模式的全部操作。
兩種模式的比較是,第一種比較靈活,但是速度比較慢。而第二種雖然靈活性沒有了,但是效能卻很高。所以,如果沒有特殊都請使用ISAPI模式。
低層介面
要使用低層介面,你必須對SOAP和XML有所瞭解。你可以對SOAP的處理過程進行控制,特別是要做特殊處理的時候。
在用戶端,首先要建立一個HttpConnector對象,負責HTTP串連。設定Connector的一些頭部資訊,比如EndPoinURL和SoapAction等。如果網路連接需要使用Proxy 伺服器,那也要在這裡設定相關的資訊。接著建立SoapSerializer對象,用於產生Soap訊息。按照WSDL裡定義,把所有參數按順序序列化,得到一個完整的SOAP請求訊息。該Soap訊息,作為Payload通過HttpConnector被發送到服務端。最後,產生一個SoapReader對象,負責讀取服務端返回的SOAP訊息,取得其中的傳回值。
在服務端,首先通過ASP裡的Request和Response對象取得HTTP串連的輸入與輸出。接著建立SoapReader對象,讀取Request對象裡的Soap請求訊息,解析出要調用的方法和調用的參數, 執行實際的調用,並取得執行結果。最後,產生一個SoapSerializer對象,按照WSDL的描述,序列化執行結果,產生Soap回應訊息,通過Response對象返回給用戶端。

五. 疑問與解答

為什麼要有WSML?
答:因為SOAP本身只是對象訪問的協議,至於實現的方式並沒有指定。一般來說,使用SOAP就是把現有系統的功能以標準的方式對外公開,讓外部能夠訪問。而在微軟的平台上,為了模組的互用性,功能的實現一般是以COM的方式提供的。而如何能夠把WSDL裡描述的方法,映射到COM的介面方法上,這就是WSML所要做的。現在你可以看到,使用WSML,你不需要做太多工作,就可以把現有的應用很快的變成Web Service應用。在服務端,你完全保留了Microsoft的COM/COM+應用模式。(當然,WSML也不是必須的,如果你不需要使用COM的方法映射。如果你不使用Soap Toolkit的高層介面,而使用底層介面。那就沒有必要了。)

如何處理複雜的資料類型?
答:你可以自己實現一個自訂的類型映射COM對象(Custom Type Mapper),並在WSML裡進行指定。這樣,Soap Toolkit在處理過程當中,會調用這個Mapper對SOAP訊息裡的訊息進行處理。比如要返回一個複雜資料,在服務端,Toolkit要懂得如何把一個複雜資料類型序列化為XML節點。而在用戶端,Toolkit要懂得如何把XML節點重新表示為一個複雜的資料結構。
需要說明的是,這個映射對象(Mapper)並不是必須的,只是為了使用的方便而使用。也就是說,雙方只要嚴格遵循WSDL裡描述的規範,就一定能夠達到調用成功。而不管你客戶和服務端是如何映射這個複雜資料類型的,是一個C結構體也好,是一個COM對象也好,或是一個Java的類也好,都是無關緊要的。

六. 關於Soap Toolkit的例子

Toolkit內建的例子已經非常全面,解釋了使用這個Toolkit需要瞭解的各種調用方式。通過看微軟提供的代碼,並親自運行一遍,就會對該Soap Toolkit有比較感性的認識了。
不過,需要提醒你的是,要能正確運行附帶的例子,你必須安裝有IIS服務,並且還要根據要求建立虛擬目錄和映射主機名稱。具體請參見Sample頁的安裝說明(Setup Instructions)。

七. Soap Toolkit的兩個工具

WSDL Generator: 該工具是Toolkit內建的,主要的功能就是可以把一個COM對象作為一個Web Service發布,用於服務端的開發。
你只要指定了COM對象以及要輸出的介面函數,和發布的網址等資訊,該工具就會自動產生對應的WSDL和WSML檔案。你只要把WSDL和WSML拷貝到對應的虛擬目錄下,一個Web Service就完成了----該工具避免了手動書寫WSDL和WSML的麻煩,但是由於該版本還無法實現複雜資料類型的映射。所以如果有複雜資料類型的情況,你還是要手動修改的。
Web Service Proxy Wizard: 該工具是在Toolkit之後才發布的,所以你需要單獨下載(地址見附錄)。該工具完成的功能正好與WSDL Generator相反,是為一個WSDL檔案產生相應的COM訪問對象,用於用戶端的開發。
你只要指定要調用WebService的WSDL檔案,該工具就會自動產生一個ATL的COM對象類(Proxy對象)。而通過調用產生的Proxy對象,就可以實現對Web Service的調用。而在這個Proxy對象裡,是通過調用Soap Toolkit的底層介面來完成整個的Soap調用過程的。而且,由於產生的是一個VC的ATL COM Object工程,你可以再進行修改,並要進行編譯而產生最後的COM對象。
使用Web Service Proxy Wizard的好處就是可以在Web Service的調用進行前期綁定,從而提高了調用效率。而且,其他的模組只需要調用這個Proxy對象,就可以實現對Web Service的調用,而不用跟Soap Toolkit有任何的直接聯絡。對其他調用模組來說,Proxy對象就是那個遠端的Web Service,跟一般的本地調用沒什麼兩樣。

八. 結論:

以上,我們僅僅是對Microsoft SOAP Toolkit 2.0進行了概要介紹。要真正掌握,還需不斷的實踐。我們將在後續的文章中對如何實作進行詳細介紹。

附錄:

Microsoft Soap Toolkit 2.0的下載地址:http://msdn.microsoft.com/downloads/default.asp?URL=/code/sample.asp?url=/msdn-files/027/001/580/msdncompositedoc.xml
MSDN上的Soap專題:
http://msdn.microsoft.com/soap/
微軟SoapSDK的新聞群組:http://msdn.microsoft.com/newsgroups/default.asp?url=/newsgroups/loadframes.asp?ICP=msdn&sLCID=us&NewsGroup=microsoft.public.xml.soapsdk&frame=true
Web Service Proxy Wizard的下載地址:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs600/html/webservproxwiz.asp?frame=true
VB Web Services Proxy Generator(在新聞群組上發現的,沒有經過測試)
http://www.vbxml.com/downloads/default.asp?id=v2001510204034




相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。