從前,分布式的應用程序邏輯需要使用分布式的對象模型,諸如:微軟的分布式組件對象模型(DCOM)、對象管理集團的公用對象請求代理程序體系結構(CORBA)或Sun的遠程方法調用(RMI)。通過使用這種基本結構,開發人員仍可擁有使用本地模型所提供的豐富資源和精確性,并可將服務置于遠程系統中。
當我已經有了我中意的中間件平臺(RMI, Jini, CORBA, DCOM 等等)時,為什么還要為Web而煩惱呢?中間件確實提供了強大的服務實現手段,但是,這些系統有一個共同的缺陷,那就是它們無法擴展到互聯網上:它們要求服務客戶端與系統提供的服務本身之間必須進行緊密耦合,即要求一個同類基本結構。這樣的系統往往十分脆弱:如果一端的執行機制發生變化,那么另一端便會崩潰。例如,如果服務器應用程序的接口發生更改,那么客戶端便會崩潰。
要求提供緊密耦合的基本結構,無可厚非,許多應用程序均是基于這種系統構建而成的。但是,當各個公司需要相互合作、或信息技術提供商擴大業務范圍時,便很難實現單一而統一的基本結構。您根本無法保證您希望與之進行遠程通信的管道的另一端,具備所有您需要的基本結構:對于它使用的操作系統、對象模型或編程語言,您可能一無所知。
相反,Web服務彼此是松散偶合的。連接中的任何一方均可更改執行機制,卻不影響應用程序的正常運行。從技術角度講,人們已轉向使用一種基于消息的異步技術來實現高可靠性的系統性能,通過使用諸如HTTP、簡單郵件傳輸協議(SMTP)以及至為重要的XML來實現統一的連接。
Web作為信息發布者的力量就在于簡單且無處不在,這對解決現在這樣一個分裂中間件世界很重要。Web通過在傳統中間件平臺上更有效實現的Services,來提供一個統一且廣泛適用的接口,這樣就改善了這個平臺。
從一個N層應用程序結構的角度來看,web service只是一個方便程序訪問的包裝,服務還是要靠中間件來實現。訪問包括服務請求處理(監聽者)和一個支持商業邏輯操作的接口,商業邏輯本身是由傳統的中間件平臺實現的。
從理論上講,開發人員可通過調用Web應用編程接口(API)(就像調用本地服務一樣),將Web服務集成到應用程序中,不同的是Web API調用可通過互聯網發送給位于遠程系統中的某一服務。例如,Microsoft Passport服務使得開發人員能夠對某應用程序進行驗證。通過Passport服務編程,開發人員可以充分利用Passport的基本結構,通過運行Passport來維護用戶數據庫,以確保它的正常運行、定期備份等等。
消息傳遞系統將通信的基本單元打包成自我描述型的數據包(又稱作消息),并將其放到網絡纜線中。消息傳遞系統與分布式對象系統之間的本質區別在于:要求發送方辨識接收方的基本結構的程度有所不同。在分布式系統中,發送方需對接收方的情況作出種種猜測:應用程序是如何激活或拆包的,調用的是什么樣的界面,等等。
另一方面,消息傳遞系統會在纜線格式級上創建合同。發送方既不需考慮消息被接收后的情況,也不需考慮接發雙方之間的通信情況,唯一需要考慮的是接收方是否能辯識發送的消息內容。
在纜線格式級上創建合同的優勢不言而喻。例如,接收方可在任何時刻進行更改,而不會干擾發送方的消息發送,只要它仍可辯識原有消息的內容。另外,發送方無需任何特殊的軟件即可與接收方通信:只要它發出正確格式的消息,接收方就可以響應。