程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Web Service

Web Service

編輯:Delphi

 

 


(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的服務器程序。

1、定義構造你的Web Services的接口。這些接口定義必須是可調用接口。最好在單獨的單元文件中創建你的接口定義,把它們從包含實現類的單元中分離出來。這樣,定義接口的單元就可以同時被服務器和客戶端程序所包含。在這個單元的初始化(initialization)區,添加注冊這些接口的代碼。

2、如果你的接口使用了任何復合(非標准)類型的數據,你就必須保證這些數據類型能夠被正確轉換(marshal)。Web Services應用程序只能處理包含說明自身結構的運行時類信息(RTTI)的特定對象。有關創建和注冊描述復合類型的對象的詳細信息,參見”在可調用接口中使用復合類型”一節。

3、定義並完成一系列類來實現你在第1步中定義的可調用接口。每一個實現類中,你可能還需要創建一個工廠過程來示例該類。在該單元的initialization段,增加代碼來注冊實現類。具體做法參見”創建和注冊實現類”一節。

4、如果你的應用程序在試圖執行SOAP請求時發生錯誤,錯誤會被自動編碼封裝成一個SOAP故障包,代替方法調用的結果被返回客戶端。如果你想傳送更多的信息,而不是一條簡單的錯誤消息,可以創建自己的例外類,對錯誤進行編碼並返回。具體做法參?quot;為Web Services創建自定義例外類”一節。

5、選擇File/New/Other菜單項,在WebServices頁,雙擊Soap Server application圖標。選擇實現Web Services的Web服務器應用程序的類型。關於各種類型Web服務器應用程序之間的不同,參見”Web服務器應用程序類型”一節。

 
6、向導生成一個包含三個組件的新Web Service應用程序: 
一個是調用者組件(THTTPSOAPPascalInvoker)。調用者完成SOAP消息和你在第1步中定義的所有接口方法之間的轉換。

一個是調度者組件(THTTPSoapDispatcher)。這個調度者會自動響應送入的SOAP消息並把它們傳遞給調用者。你可以使用它的WebDispatch屬性來識別你的應用程序所響應的HTTP請求消息,包括設置PathInfo屬性來指明指向你的應用程序的任何URL的路徑部分,設置MethodType屬性來指明請求消息的方法頭。

一個是WSDL發布者(TWSDLHTMLPublisher)。WSDL發布者發布描述你的接口以及如何調用它們的WSDL文檔。它使非Delphi編寫的客戶端程序也可以調用你的Web Service應用程序。

7、選擇Project/Add To Project菜單項,把你在第1步到第4步中創建的單元文件加入Web服務器應用程序。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved