一、介紹
SOAP實作遠端資料存儲比起DCOM以及Midas都要好,因為它可以使用80端口,并且在伺服器端無需多添加一個托盤圖示,部署也相當友善。
要在VC6下實作SOAP的用戶端,可以使用微軟提供的Soap SDK,或者是開源的gSoap(其實網上還有xSoap,eSoap等很多),如果采用微軟提供的Soap SDK的話,用戶端部署就稍微麻煩一些,需要注冊一堆的元件,如SOAP,XML等。
gSoap是一個誇平台的,用于開發Web Service服務端和用戶端的工具,使用C和C++語言編碼,當看到這個東東的時候,就不會再想用微軟的SDK了。
二、執行個體介紹
例子的伺服器端使用C#開發的ASP.NET Web Service,用戶端使用gSoap,例子的内容相當簡單,就是測試連接配接。
三、建立伺服器端
在VS2003裡面建立一個ASP.NET Web 服務MyWebService,建立函數如圖所示:
使用[WebMethod]來辨別對外輸出的函數名。點選運作會出現如下頁面:
四、建立用戶端
首先,點選服務說明,将WSDL使用檢視源代碼的方式存儲為MyService.wsdl檔案。
然後,使用開源的WsdlToCode工具,建立用戶端代碼:
選擇之前産生的wsdl檔案後,點選生成按鈕,産生的檔案如下圖:
第三,在VC6.0下建立基于對話框的工程TestClient,将MyServiceSoap.nsmap,soapC.cpp,soapClient.cpp,soapH.h,soapStub.h,以及gSoap工程根目錄下的stdsoap2.h,stdsoap2.cpp,總共七個檔案添加到工程,再添加代碼:
在對話框類中添加頭檔案包含。
#include "MyServiceSoap.nsmap"
代碼編寫如下圖:
修改soapC.cpp,soapClient.cpp,stdsoap2.cpp的編譯條件為不需要預編譯頭檔案,gSoap不需要MFC。
第四,運作結果:
- 伺服器端的函數必須要有入口參數,以及傳回參數;
- 伺服器端必須要安裝IIS以及FrontPage200伺服器擴充,由于有些機子使用的是DeepIn系統,可能安裝了IIS而沒有安裝FrontPage200伺服器擴充;
- gSoap是支援使用者名以及密碼登入的,上面的代碼是采用匿名登入,是以需要将Web Service設定為匿名登入;
- 入口參數以及傳回參數可以采用Xml與Base64編碼,這樣就支援所有的資料格式了,甚至是整個資料庫;
- 十行代碼之内就可以解決一個不小的問題還不多見,是以我強烈推薦使用gSoap;
- 本文涉及的所有代碼都在附件中,希望與大家多多交流;