(1)概論
Web Services是自包含(self-contained)的模塊化應用程序,能夠被跨越網絡(例如World Wide Web)發佈(publish)和調用(invoke)。Web Services提供無缺的接口定義,說明所提供的服務。
Web Services被設計爲容許客戶端和服務器進行鬆散耦合。也就是說,服務器端的實現並不要求客戶端應用某種特定的平臺或者開發語言。除了在語言無關方式下定義接口以外,Web Services也被設計爲容許使用多重通信機制。
Delphi經過使用SOAP(簡單對象訪問協議)來實現對Web Services的支持。SOAP是爲在分散分佈式環境中交換信息而設計的標準輕量型協議。它使用XML來編碼遠程過程調用,一般使用HTTP做爲通信協議。要得到有關SOAP的更詳細的信息,請在 http://www.w3.org/TR/SOAP/ 查看SOAP規範。
注意:雖然Delphi只支持基於SOAP和HTTP的Web Service,但其框架已經十分完整,能夠被擴展到其餘編碼和通信協議下工做。
Delphi以SOAP爲基礎的技術能夠在Windows下運行,很快也將在Linux上實現,所以它能夠做爲跨平臺分佈式程序的基本組分。與發佈使用CORBA的分佈式程序不一樣,它在客戶端不須要安裝任何運行時軟件。由於這種技術基於HTTP消息,它的優點在於在各類機器上都獲得了普遍的支持。對Web Services的支持創建在Delphi的跨平臺Web服務器應用體系結構頂端。
使用Delphi既能夠創做實現Web Services的服務器,也能夠開發調用這些服務的客戶端。若是使用Delphi同時開發服務器和客戶端應用程序,開發人員就能夠共享定義Web Services接口的單一單元。另外,可使用Delphi開發實現響應SOAP消息的Web Services的任意服務器程序的客戶端,用Delphi開發的發佈Web Services的服務器程序也能夠被任意的客戶端調用。
若是客戶端或者服務器不是用Delphi創做的,你仍然能夠經過使用WSDL(Web Services定義語言)文檔來公佈可使用哪些接口或者引入如何調用這些接口的信息。在服務器端,你的應用程序能夠發佈一份WSDL文檔來描述你的Web Services。在客戶端,嚮導程序將幫助你引入已發佈的WSDL文檔,爲你提供你所須要的接口定義和鏈接信息。
(2)創做支持Web Services的服務器
在Delphi中,支持Web Services的服務器是經過可調用(Invokable)接口構建的。可調用接口是編譯後包含運行時類信息(RTTI)的接口。這份RTTI會在解釋傳入的客戶端方法調用時用到,經過它方法調用纔可以被正確的轉換(marshal)。
除了可調用接口和實現它們的類以外,你的服務器須要兩種組件:調度者(dispatcher)和調用者(invoker)。調度者(THTTPSoapDispatcher)是接收SOAP消息並將它們傳送給調用者的的自動調度組件。調用者(THTTPSoapPascalInvoker)解釋SOAP消息,辨別其調用的可調用接口,執行調用而且組裝響應消息。
注意:THTTPSoapDispatcher和THTTPSoapPascalInvoker被設計爲響應包含SOAP請求的HTTP消息。這種基礎體系結構很是通用,不過,它也能夠經過使用不一樣的調度者和調用者組件來支持其它協議。
只要你註冊了你的可調用接口和它們的實現類,調度者和調用者就會自動處理全部(在HTTP請求信息的SOAP動做頭中調用這些接口的)消息。
(3)構造一個Web Services服務器
經過下列步驟來構造一個實現Web Services的服務器程序。
一、定義構造你的Web Services的接口。這些接口定義必須是可調用接口。最好在單獨的單元文件中建立你的接口定義,把它們從包含實現類的單元中分離出來。這樣,定義接口的單元就能夠同時被服務器和客戶端程序所包含。在這個單元的初始化(initialization)區,添加註冊這些接口的代碼。
二、若是你的接口使用了任何複合(非標準)類型的數據,你就必須保證這些數據類型可以被正確轉換(marshal)。Web Services應用程序只能處理包含說明自身結構的運行時類信息(RTTI)的特定對象。有關建立和註冊描述複合類型的對象的詳細信息,參見」在可調用接口中使用複合類型」一節。
三、定義並完成一系列類來實現你在第1步中定義的可調用接口。每個實現類中,你可能還須要建立一個工廠過程來示例該類。在該單元的initialization段,增長代碼來註冊實現類。具體作法參見」建立和註冊實現類」一節。
四、若是你的應用程序在試圖執行SOAP請求時發生錯誤,錯誤會被自動編碼封裝成一個SOAP故障包,代替方法調用的結果被返回客戶端。若是你想傳送更多的信息,而不是一條簡單的錯誤消息,能夠建立本身的例外類,對錯誤進行編碼並返回。具體作法參?quot;爲Web Services建立自定義例外類」一節。
五、選擇File/New/Other菜單項,在WebServices頁,雙擊Soap Server application圖標。選擇實現Web Services的Web服務器應用程序的類型。關於各類類型Web服務器應用程序之間的不一樣,參見」Web服務器應用程序類型」一節。
六、嚮導生成一個包含三個組件的新Web Service應用程序:
一個是調用者組件(THTTPSOAPPascalInvoker)。調用者完成SOAP消息和你在第1步中定義的全部接口方法之間的轉換。
一個是調度者組件(THTTPSoapDispatcher)。這個調度者會自動響應送入的SOAP消息並把它們傳遞給調用者。你可使用它的WebDispatch屬性來識別你的應用程序所響應的HTTP請求消息,包括設置PathInfo屬性來指明指向你的應用程序的任何URL的路徑部分,設置MethodType屬性來指明請求消息的方法頭。
一個是WSDL發佈者(TWSDLHTMLPublisher)。WSDL發佈者發佈描述你的接口以及如何調用它們的WSDL文檔。它使非Delphi編寫的客戶端程序也能夠調用你的Web Service應用程序。
七、選擇Project/Add To Project菜單項,把你在第1步到第4步中建立的單元文件加入Web服務器應用程序。web