軟體項目實訓及課程設計指導——如何在基於面向服務系統架構設計的項目中應用Web Service技術(上篇)
1、了解軟體系統開發人員所能夠獲得的各種層次的功能服務及所存在的問題
(1)計算機作業系統中所提供的「Service」(服務)
個人計算機軟體的發展早期是基於微軟DOS作業系統的,在早期DOS作業系統中就提供有「中斷服務」的概念和有關的API,允許應用程式直接調用DOS作業系統所提供的中斷服務程序而獲得DOS作業系統中的各種功能(服務)。
隨著個人計算機作業系統從DOS平臺進入到微軟Windows圖形界面的系統平臺,Windows作業系統仍然繼續為PC應用程式提供服務支持,而形成「Window Service」的概念(如開發人員利用VC++訪問Window系統API)。
(2)某種程式語言中所提供的API服務
軟體應用系統的開發人員在應用某種程式語言開發相關的軟體程序時,在該語言中一般也會提供語言級別的API服務。如Java語言中的JDK、C/C++語言中的API庫等形式。如下示圖為JDK API系統庫的幫助文檔的局部截圖,Java程式設計師在開發軟體系統項目時一般都會隨時查閱這個幫助文檔中的相關類、方法及接口等說明信息。
(3)某種開發平臺中所提供的組件服務
在微軟的技術平臺中,提供有COM/DCOM組件;而在Sun J2EE技術平臺中提供有EJB組件。它們都是平臺級別的組件服務。軟體系統的開發人員在應用系統程序的設計和開發實現中,充分地應用這些平臺級別的組件服務,能夠大大地簡化軟體系統的開發工作量和提高軟體系統的可靠性。
儘管在軟體開發中,從作業系統底層乃至開發平臺的高層都提供有不同層次的功能服務,但這些功能服務都存在有一定的限制或者應用要求——作業系統中所提供的各種系統服務只適用該作業系統中運行的各種應用程式,而某種程式語言中所提供的API服務也只適用基於本語言編程實現的各種源程序代碼之間,而開發平臺中所提供的組件服務也同樣只適用該開發平臺,如在J2EE平臺下的程序不能直接獲得微軟的COM/DCOM組件所提高的功能服務,反之也一樣(在微軟的COM/DCOM組件中也不能直接獲得J2EE平臺下的EJB組件所提供的功能服務)!
2、Web Service技術是面向對象/面向組件技術在Internet環境中的進一步延伸
(1)Web Service是面向對象/面向組件技術在Internet中的延伸
Web Service是一種新型的Web應用程式,它們是自包含、自描述、模塊化的應用程式,可以在Web環境(包括企業內部網Intranet和廣域網Internet)中被描述、發布、查找以及通過Web方式來調用其它的Web服務組件。
從這個角度來看,Web Service組件技術其實是面向對象開發技術和更高級別的面向組件開發技術在Intranet/Internet環境中的進一步延伸和擴展。
(2)Web Service從本質上講是放置於Web站點上的可重用組件
WebService組件是分布式和模塊化組件,每個組件本身能夠完成特定的業務功能或者服務、並且遵守WebService技術規範(WS標準),這些WebService技術規範保證Web Service組件之間能夠進行互操作。
作者註:
分布式系統是由一組通過網絡進行通信、為了完成共同的任務而協調工作的計算機節點組成的系統。
(3)Web Services是對諸如RMI、COM和CORBA等現有面向服務的技術的擴展
但Web Services技術目前是一套標準的平臺技術,它定義了Web服務組件如何在Web級別的平臺上實現互操作和在不同的平臺下的應用協同。
由於Web Service技術是採用簡單對象訪問協議(SOAP)進行數據通訊,而SOAP的下層協議仍然為超文本傳輸協議(Http,Hypertext Transfer Protocol)。因此,基於Web Services技術實現的各種服務組件可以是在現有的各種平臺組件的技術基礎上進一步功能擴展和升級完善。
這為企業應用Web Service技術降低了技術應用的成本!因為基於Http協議的網絡已經普及和廣泛地應用了。
3、Web Service技術與微軟的COM組件和Sun的J2EE EJB組件技術不同點
(1)微軟COM組件和Sun J2EE EJB組件協議是基於特定技術平臺
微軟COM/DCOM/COM+組件技術平臺下的客戶端和其伺服器端程序之間相互通訊採用的是基於微軟Windows系統中特有的COM協議——COM協議是微軟公司定義的用於對象、應用程式之間交互功能的標準協議。
而Sun(現為Oracle公司)的J2EE EJB組件技術平臺下的客戶端和其伺服器端程序之間相互通訊採用的是RMI-IIOP協議——RMI-IIOP是基於Internet ORB間協議的Java遠程方法調用,是J2EE標準體系中實現分布式對象的相互通信的標準。
如下示例圖的左邊為微軟的DNA架構體系工作原理示圖(DNA是指Windows Distributed Internet Application Architecture,也就是「Windows分布式應用結構」的含義),而右邊代表J2EE三層架構的工作原理示圖。
由於微軟的COM協議和J2EE的RMI-IIOP協議一方面都是某個特定的技術平臺下特有的專用協議,另一方面它們都採用二進位格式的數據作為網絡協議,這樣將無法穿越企業網絡系統的防火牆——組件的客戶端無法在企業網絡的外部對部署在企業內部的伺服器端中的組件進行訪問以獲得相關的功能服務。
(2)Web Service技術組件之間的協議是跨平臺的XML技術標準
Web Service核心技術基礎是可擴展標記語言XML,其相關標準協議包括服務調用協議SOAP、服務描述語言WSDL以及服務註冊檢索訪問標準UDDI等都是基於XML標準的。這將保證Web Service組件能夠適應「異構的企業應用環境」和「不斷變化的企業需求」。
另外,也為企業推廣「移動辦公」和跨地區(包括跨國)、跨行業的「遠程訪問」和「業務協同」提供了技術實現的可能性。因為XML是文本格式,基於XML格式的交互消息可以穿越企業網絡系統的防火牆——組件的客戶端可以在企業網絡的外部對部署在企業內部的伺服器端中的組件進行訪問以獲得相關的功能服務。
4、Web Services組件的客戶端和伺服器端組件的請求和響應過程
(1)Web Services組件客戶程序通過網絡並利用SOAP協議向Web Services服務組件所在的應用程式伺服器發出SOAP消息的請求,該請求中的URI中包含有該伺服器識別和被調用的具體Web Services組件的標識。請參考下圖所示的過程說明圖。
(2)支持Web Services技術的伺服器讀取SOAP請求消息,並且識別它需要調用的目標組件中的方法。
(3)伺服器進一步解析SOAP請求消息以獲得請求參數、並對客戶端傳遞來的請求參數實現從XML到Java之間的轉換(利用對象反序列化技術實現)。
(4)然後再對目標組件中的請求方法進行調用,並向目標方法傳遞由客戶端通過SOAP請求消息傳遞來的調用參數。
(5)目標組件中的請求方法被調用完畢之後,後端Web服務功能組件返迴響應的結果,由Web Services伺服器使用合適的序列化類將該響應從Java數據類型再轉換為XML數據類型(利用對象序列化技術實現),然後再將它打包為SOAP消息響應向客戶端調用者返送。
整個請求響應的過程請見上圖示例圖所示,根據Web Service的請求響應的過程也可以了解到Web Service體系架構中存在有三個不同的角色。
(1)服務提供者
從業務角度看,它是服務的擁有者;而從系統體系看,它是訪問服務的平臺。
(2)服務請求者
從業務角度看,它是請求特定功能的業務;而從系統體系看,它是尋找並調用服務或啟動與服務交互的應用。服務請求者可以是基於B/S系統的Web程序或者是基於GUI圖形用戶界面的應用程式實現。
(3)服務註冊中心
是一個可搜索的註冊器,服務提供者將服務描述發布其中,服務請求者查找服務並獲取綁定信息的工作。
5、應用Web服務組件技術的開發實現過程
(1)Web服務組件開發者的工作內容
主要涉及設計和編程需要發布為Web服務的業務功能組件,並向WebService伺服器的註冊中心提供本WebService服務方法的說明信息——這可以利用WSDL來描述本WebService組件中的Web服務方法。
當然,為了使WebService的客戶端程序(Web服務的請求者)能夠找到和了解本Web服務組件,需要對本Web服務組件進行註冊——這同樣也是利用WSDL來描述本WebService組件有關的信息。
(2)Web服務組件使用者的工作內容
Web服務組件使用者(Web服務客戶)從Web服務組件所在的WebService伺服器的註冊中心中搜尋和發現所需要訪問的目標Web服務組件——這要利用統一描述、發現和集成協議UDDI(UDDI, Universal Description Discovery and Integration,它是一套基於Web的、分布式的、為Web Service提供的、信息註冊中心的實現標準規範而且也是基於XML標準)。
成功找到後,然後使用Web服務組件中的目標方法、並獲得目標方法的返回結果——這仍然要應用SOAP協議進行通訊和描述返回的信息。
(3)MyEclipse開發工具全面地提供了對開發WebService的技術支持
Java平臺的開發人員可以藉助於MyEclipse IDE開發工具開發實現WebService組件、包括發布Web服務等,大大地簡化了開發過程,並提高了開發效率。而且提供了對JAX-RS和JAX-WS兩種不同風格的WebService框架的支持。如下示圖為在MyEclipse IDE開發工具創建WebService項目的界面局部截圖。