微軟的.NET開發平臺已經發布好長時間了,我們現在需要放棄以前編寫的組件而轉到VB.NET和C#嗎?答案是否定的。我們既不需要放棄以前的組件,反而可以加以利用。大多數程序開發人員要從以前的開發環境遷移到VB.NET和C#是需要付出一定的代價的。然而,為了保持現存程序的兼容性,仍然需要使用VB6。值得慶幸的是,微軟的SOAP開發工具Simple Object Aclearcase/" target="_blank" >ccess Protocol (SOAP) Toolkit給了我們一個既可以利用以前的我們用VB6編寫的ActiveX DLL,又可以利用Web Services的給我們帶來的好處,它可以讓我們的組件作為一種服務通過SOAP在WEB上使用。
SOAP為我們編寫分布式的應用程序提供了方便,我們可以利用它以一種平臺無關和位置無關的方式來調用組件。SOAP客戶端向服務器發送請求信息,要求執行組件的功能,服務器處理發送的請求,執行我們需要的函數,然后把執行結果以響應信息發送到客戶端。這些消息都是XML格式的,而且可以以多種協議在客戶端和服務器之間進行傳輸,我們就以最常用的HTTP協議做為例子。
SOAP利用HTTP作為傳輸機制能夠讓我們創建的應用程序不但可以是本機的,還可以是局域網的,還可以是因特網的。由于XML是平臺無關的,因此我們寫的應用程序可以在Windows,Unix,以及手持或無線設備上應用。
現在我們就看看如何把我們的ActiveX DLL通過SOAP ToolKit轉換成Web Services。調查是因特網上最常見的一項內容,我們就把調查作為一個組件,能夠讓其它應用和網頁使用,調查組件TestServey實現三個函數:RequestSurvey,RespondToSurvey和SurveyResults。
打開Visual Basic6.0,新建一個ActiveX DLL工程,名為TestSurvey,VB6會自動添加一個名為Class1的類,把它更改為Survey,工程屬性如下圖所示:
然后輸入下面的代碼:
RequestSurvey函數根據調查的ID號返回調查的問題,RespondToSurvey函數是把調查結果保存到數據庫。DisplaySurveyResults函數用來返回調查結果。最后進行編譯,生成TestSurvey.dll。
下面,打開SOAP ToolKit,如果沒有安裝,可以到http://download.microsoft.com/download/xml/Install/3.0/W982KMeXP/EN-US/SoapToolkit30.EXE免費下載。從“開始”菜單里運行“SOAP Toolkit's Web Services Description Language (WSDL) generator”:開始|程序| Microsoft Soap Toolkit Version 3 | WSDL generator,然后按照向導進行操作。首先出現一個歡迎窗口,如下入所示:
點擊“Next”按鈕,出現如下的頁面:
上圖可以允許我們選擇一個配置文件,配置文件允許我們能夠重新裝載或改變我們以前用生成器生成的組件的設置信息,這對為組件添加新的方法或從不同的服務器移除組件時很有用,這里我們什么也不選。點擊“Next”按鈕,出現下面的窗口,要求輸入Web Services的名字和dll文件的位置:
我們輸入Web Services的名字為TestSurvey,選擇我們編譯的TestServey.dll的位置,點擊“Next”按鈕,出現下面的窗口:
要求我們選擇我們要作為Web Services的類和方法,我們把TestSurvey類的方法全部選擇。然后點擊“Next”按鈕,出現下面的窗口,要求我們選擇要進行監聽的服務器地址和來自SOAP客戶端請求的監聽方式。
點擊“Next”按鈕,將會出現下面的窗口,允許你輸入WSDL使用的一些URL地址:
點擊“Next”按鈕,該向導將會允許你輸入要新文件存放的路徑和配置文件存放的路徑,如下所示:
然后點擊“Next”按鈕,再點“Finish”即可完成。該SOAP生成器自動生成四個文件保存你前面輸入的所有的值:TestSurvey.wsdl、TestSurvey.wsml、TestSurveyClient.wsml、TestSurvey.asp和一個配置文件TestSurvey.WGen。
下面,我們需要對向導創建的結果進行測試,其中的TestSurvey.asp文件包含了調用Web Services的方法,TestSurvey.wsdl文件是供局域網之外的殼戶端使用的XML定義,一個能夠使用SOAP的客戶端要使用你的Web Services,就必須能夠理解能夠使用的方法和參數。TestSurvey.wsdl文件說明了以XML格式使用你的Web Services進行請求和響應的定義。SOAP Toolkit3.0生成2個WSML文件,TestSurvey.wsml識別testServey的ProgID,同時也包含了WSDL文件中請求信息和COM接口的映射,TestSurveyClient.wsml包含了任何比較復雜的數據類型映射,如果定義了復雜的數據類型,這個文件才會用得到。
WSDL文件把你的所有方法分解成單獨的請求和響應的信息元素,在SOAP中,客戶端向Web Services發送請求,其中提供名字屬性,包含類名、方法名,這個文件還包含Survey.RequestSurvey請求信息元素,這些信息通過包含DLL中的類名、方法名由SOAP生成器自動生成。當它接收到請求信息時,服務器執行Web Services的功能,并返回響應結果。名字元素基本上和請求信息一致,SOAP生成器自動加上“Response”的后綴,例如:對RequestSurvey方法的響應會對應成Survey.RequestSurveyResponse。
SOAP生成器為每個參數指派為一個XML的part元素,把name屬性和我們的DLL函數里的參數匹配起來,生成器還把參數類型翻譯成SOAP中同等的數據類型。生成器在創建WSDL文件時只是簡單地映射數據類型,如果不能夠映射方法中的某些參數時,就會用7個問號“?”來代替。下圖就是SOAP數據對象和VB6數據對象的映射關系:
下面,我們創建虛擬目錄,以便我們剛才創建的文件能夠被Internet Information Server (IIS) Web服務器使用。打開Internet服務管理器,利用創建向導創建虛擬目錄,別名與我們在WDSL里指定的一樣,物理目錄指向我們保存新文件時指定的目錄。虛擬目錄創建好了以后,我們就可以對我們的Web Services進行測試了。
在調查表單里,添加名為lblSurveyQuestion的Label控件,用來顯示調查的問題,兩個radio button,名為optAgree(標題為“同意”)和optDisAgree(標題為“不同意”),一個Command Button,名為cmdSubmit。在窗體的Load事件里,我們把問題請求回來,然后用提交按鈕發送給Web Services,然后返回結果。下面就是測試的結果:
從上面的例子可以看出,訪問Web Services是很簡單的,在VB中調用Web Services的方法就象我們直接調用MSSOAP.SoapClient30的方法一樣,是不是很方便。
原文轉自:http://www.anti-gravitydesign.com