的測試報告( Delphi ) 說明:使用 Delphi 操作一個 Web Service 是不復雜的,而創建一個 Web Service 服務及生成客戶端調用相對都不難," name="description" />
Web Service MILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的測試報告(Delphi)
說明:使用Delphi操作一個Web Service是不復雜的,而創建一個Web Service服務及生成客戶端調用相對都不難,在delphi6中有幾個現在的組件精靈的,我們用它便可以向導式的生成我們所需要的接口方法,只是開頭摸索的過程有點費勁,等把架子弄好之后,再往里添加新的方法時就很容易了,我下面將結合一個例子描述一下我的創建過程,并簡單說明一下它的執行效率的測試,最后再和孫一波交叉測一下,比較一下優劣(各方面)。
測試環境:Web Service(以下簡稱WS)放在本機上,走IIS的Web服務??蛻舳艘苍诒緳C上,兩端都是用delphi6所編寫的。
時間效率:耗時主要費在兩個方面,其一是WS的定位找尋;其二是數據庫的連接及數據庫的操作(主要耗在連接上,操作我認為幾乎可以忽略)。
執行一個操作(如:Select或Insert SQL操作)大概要半分鐘左右,主要是第一次操作慢,如果你連著做幾個動作,那個時間則要不了多久的。所以大頭的時間都是耗在WS的定位網絡時耗上。
在數據庫的連接上,我做了兩個實例,其一是用ODBC連接做相關操作,其二是用ADO連接做操作,這兩個實例給我的人為感覺上差不多時間,沒有太大區別,等你們測再看看了。
程序編寫難度:除了那幾個新組件要熟悉一下外,其余的都是delphi5里的東東,難度不是很大,也比較容易上手,如果有一個模式可以套的化。編第一個WS我花了一天多點的時間,主要是國內的站點上用C#講的比較多些,用delphi的則很難找到現成的例子,我是結合《程序員》雜志上及一兩個國外站點上找的資料而寫的。
下面我就把這個Test的思路流程及一些關鍵的技術給描述一下,給大家參考,希望能拋磚引玉,呵呵!
一、服務器端實現
1.New 一個Application
2.在New Items頁選擇WebService中選擇Soap Server Application,系統會自動給你生成一個Web Module,里含三個組件:一個TTPSoapDispatcher組件, 一個 HTTPSoapPascalInvoker組件, 和一個 WSDLHTMLPublish 組件,如下圖:
第一個組件響應到來的SOAP請求而后將它們發送給我們的Web模塊.第二個組件將到來的SOAP請求翻譯成對我們的Pascal對象方法的調用過程.第三個模塊產生基于我們發布的可調用界面的WSDL,以便外界能夠得知如何使用我們的Web服務,這些我們可以先不管,因為這都是自動產生的,如果不想深入研究WS的機制的化,這些可先拋在一邊,因為它們的功能已全部自已產生,不用我們去操心了。
3.然后生成二個比較重要的文件,來描述我們這個Test WS能對外提供哪些服務的,據我摸索,這兩個文件只能手工寫,它們也是WS在delphi中的架子。具體怎么寫可參看我的源碼,在王劍白的共享目錄中有。
4.再生成一個數據模塊,它是用來和數據庫打交道的,有TdataBase,TQuery(兩個一個放有反饋結果的SeleSQL,一個是沒有反饋結果的ExecSQL),這個DM在步驟三中接口實現中都會用上的。
5.這些都做完后,編譯生成Exe文件,一個Web Service就完全生成了,Pretty Cool ,HuH!,然后我們可以用Http://localhost/Service/test/Itest/wsdl/Itest,在Brower里就可以看到此WS的WSDL的描述了,一切就緒了,就等著調用了。
二、客戶端實現
說明:使用delphi6開發調用Web Service的客戶端應用程序更簡單了,因為它提供的WebServices組件組中的THTTPRIO組件是很方便的,只要我們設它的欲調用的WS的WSDL,那么THTTPRIO組件便可以自動的處理所有調用的WS的細節了。
步驟:
1. New 一個Project Application
2. 在New Items頁選擇WebService中選擇Web Service Importer,在提示框中輸入Http://localhost/service/test/Itest/wsdl/Itest,也就是WSDL(Filename或URL),系統會自動產生一文件,來描述我們的WS,這個我們也可以先不管,打開一看,里頭有我們所定義的函數說明。
3. New 一個Form,拽入THTTPRIO組件,設好它的屬性WSDLLocation,同樣是上面那個串,選好它的Port和Service屬性,我們該做的預備工作都做好了
4. 拽一個Button過來,寫你想調用的方法就可以了。好了,全部完了!
有幾點注意的地方:
1. 在WS方法實現文件中要創建數據模塊,我的程序里用CreateDM私有函數來完成的,最后再FreeDM掉,千萬不能在Project中用Application.CreatForm(TDM,DM)來完成,要不WS總會有錯的。
2. 在IIS虛目錄中,一定要選上執行CGI的權利那一項,要不也是不行的。
3. 在New Soap Server Application時,最好不要選擇創建DLL形式的WS,要不編譯時總要重起機子的,否則是不讓編譯的。
還存在的問題:
1.調WS時,不能跟蹤進去,不知有沒有好的辦法。
2.除了DM方式操作數據庫外,不知還有沒有別的途徑來,因為我想把數據庫操作或者說業務邏輯部分建立在WS之上一層,讓它先運行,駐留在內存中,這樣以后WS再調時,就不用再與數據庫連接,因為已建好,這樣可能會大大提高時間效率的,這些問題,我想以后再慢慢想吧!原文轉自:http://www.anti-gravitydesign.com