通過具體項目淺談及實戰WebService

“話說天下大事, 分久必合,合久必分.”(三國演義)----軟件行業是不是也一樣呢?

現在的軟件行業有著各種各樣的技術平台,體系架構,但由于不同平台關注的方面不一樣,各有各自的特色,平台之間很難溝通,從而形成一個個的信息孤島.那如何把這些信息孤島聯系在一起呢.?業界提出了很多的方案,一個很著名的方案就是 Serviced-Oriented (面向服務).那面向服務是什麽呢?這是對它的定義:“SOA is an architectural style whose goal is to achieve loose coupling among interacting software agents. A service is a unit of work done by a service provider to achieve desired end results for a service consumer. Both provider and consumer are roles played by software agents on behalf of their owners.”(1).面向服務是一系列服務的集合.各個服務之間可以互相通信(包括簡單的數據傳遞和多個服務共同參與一個活動) ,它通過爲各個系統提供一些外部接口,從而達到集成各個系統的目的.業界也有些相對應的體系架構,例如: DCOM.CORBA.J2EE.但都無法徹底實現跨系統的集成.個人覺得原因如下:

1.接口定義語言無法被不同系統所接收.無論是DCOM.COBRA 還是J2EE都有各自的接口定義語言(都是二進制的).它們都無法被其他系統所接受.而接口一旦被設定就很難改變.而用戶的需求是在不斷變化的.

2. 使用的是二進制的網絡協議來進行數據通信.很難跨過防火牆,而且各自使用的協議沒有被廣泛的接收,這點對Internet的運用尤爲關鍵

這時一種新的體系架構出現了,它就是XML Web Services,微軟對它的定義是 : “XML Web services 是提供特定功能元素(如應用程序邏輯)的可編程實體,任何數量的、可能是完全不同的系統都可以用常見的 Internet 標准(如 XML 和 HTTP)訪問它。它的核心特征是存在于服務的實現與使用之間的高度抽象化。” Web Services正在迅速的被各個平台所接受.相對于其他架構,它的優勢在與:

1. 接口定義語言.它使用WSDL作爲接口定義語言.這是一種基于XML格式的Document ,而文本是可以被各種系統和平台所認識的.

2. 使用HTTP,SOAP,SMTP等其他被廣泛接受的協議進行數據通信.而HTTP是Internet的基礎協議之一

那如何深入的理解Web Services呢?個人覺得應從以下幾個方面入手:

一.目的

它是實現SOA的一種方式,是爲了連接不同的系統和計算設備.實現系統和數據的互操作性

簡單的說是要能夠訪問不同的系統和計算設備中的數據.而不用關心這些數據在各自系統和設備中是如何存放的.也可以說成不用關心數據是如何封裝的(類似OO裏的黑盒)

二.定義

XML Web Service顧名思義就是使用XML來提供Web服務.其實嚴格的說Web可以不要,就是XML Service,因爲並不是所有的Web Service都需要WebServer的.服務就是把我有的功能提供給使用者,也就是向使用者提供一個接口,這就是Web Service.因此Web Service絕對不是一種新的分布式對象.而DCOM , CORBA,J2EE 本質上都是分布式的對象.

三.組成

1. 一些能處理XML的組件.

首先XML Web Service(或者Web Service)要能夠處理XML,至于處理XML的組件是如何設計的.不同語言,平台有不同的方式.可以是OO(面向對象)的.也可以是其他方式.在.Net裏是通過.Net Framework 提供的一些類實現的

2. XML 文檔

前面我們說過Web Service優勢之一在與接口定義語言(IDL)是基于XML的文檔,由于Web Service 是SOA(面向服務)的一種,而SOA的目標是在系統之間建立一種松散的耦合,因此服務和消費服務方就不能以Object作爲數據溝通的紐帶或者說锲約(Contract) ,就必須使用XML文檔來做爲锲約.那爲了使服務提供方和消費方都能夠理解Contract的含意.Web Service使用WSDL來描述XML文檔.即描述對外的接口.同時使用XML Schema來描述文檔裏的數據

3. XML文檔的載體

有了XML文檔就需要一個承載它的協議.Web Service使用SOAP作爲載.SOAP:簡單對象訪問協議,嚴格來說這個名稱是錯的,因爲它不是用來訪問對象的.MS給它的定義是” SOAP 是一種基于 XML 的、用于在 Web 上交換結構化和類型信息的簡單的輕量協議”.它以信封的方式來承載XML文檔.信封分爲兩部分: 信封頭(head) 和信封體(body).頭一般用來保存一些輔助的信息,例如安全(簽名和加密數據)和路由信息,信封體用來保存锲約即服務的接口描述和具體的數據

4. 服務的地址

用來告訴服務消費方從哪裏可以訪問服務,服務位于何地,對此

Microsoft提供了UDDI(通用說明、發現和集成).

Net 實現Web Service的方式是通過ASP.NET.它封裝了很多的細節,使開發人員開發WebService很方便,但造成的結果是使認識本質比較困難.(MS的一貫作風).

l 通過Web方法的形式來調用Web Service.

前面說了Web Service之間交換的實際上是XML文檔,考慮到很多程序員

不習慣直接操作XML(喜歡操作對象及其方法),在.Net裏將接收到的

XML文檔轉換成對象或作爲方法的參數的值,同時又會將得到的值或對

象反序列化成XML文檔發送回服務消費者,服務消費者就可以以傳統的

調用對象的方法的形式來向服務提供者發送請求從而獲得希望的數

據.從消費者提出服務申請到得到相應的結果的流程如下(2)-:

由這個流程圖(2)可以看到.客戶端要調用Web Service首先要發送消息.

而服務端是通過消息知道有消費者要調用它.因此從某種意義上說.Web

Service是一種基于消息的體系架構,只不過消息是基于XML的文檔

l 代理類的産生

代理類的作用是用來方便和Web服務進行通信的.在.Net 裏可以以自動和手

動的方式産生,兩者都是根據服務的WSDL文件産生的.正如前面所說爲了方便

程序員的習慣用法,.Net會將XML文檔反序列化成對象,在代理類裏也是同樣的.

這樣就會給我們一種錯覺,好像在客戶端重新生成了服務端的對象.例如: 一個

Web方法 Test向客戶返回一個ObjectA

public class ObjectA

{

public string FieldA

public string FieldB

}

那麽在代理類同樣會生成一個ObjectA.它的結構和服務端的ObjectA是一模一

樣的.但實際上這只是.Net爲了方便我們使用Web Service而人爲生成的(這也是

很多人認爲WebService是用來進行遠程對象訪問的原因之一).對Web服務客戶

端而言,接收到永遠只有XML文檔,文檔裏的數據是以XML Schema描述的.至于

怎麽使用是各個Web客戶端各自的特點,對.Net而言它會將一些複雜的自定義

的XML Schema類型轉換成Object.其他的一些客戶端就不會轉換成Object.例如

Soap Tookit.它會轉換成一個XML 節點(Node)對象

下面就結合一個實際的項目來說明如何實施Web Service.

一. 項目概況

某公司有個現有産品ProductA.(PA) ,它需要獲得一些數據來進行業務處理.這些數據按地區和時間是會變化的,同時數據是由相應的政府機構定的,不同地區的政府機構的數據是不同的,每變動一次都需要以公函的形式通知産品用戶,或者由公司自己整理然後告訴用戶去更新.這樣就造成不同地區有不同版本,用戶升級困難,同時政府機構之間的數據很難溝通和對比

二. 解決方案

利用Web Service的功能,將所有政府機構的數據都公開(當然要權限的 J).産品(PA)作爲WebService的客戶端可以實時訪問不同的數據,這樣産品和數據之間,數據和數據之間,用戶和數據之間都無縫的聯系在一起了

三. 具體實施

有了服務就有服務的兩個參與者:服務的提供者和服務的消費者

對于産品(PA)它是服務的消費者.因此它只是個Web Service Client.可以是任

何類型的程序.現有的PA是個VB版的程序,可以通過代理類來訪問不同

的 Service.

對于數據(A.B.C…….).它們即是服務提供者同時也是服務消費者.由于用戶

需要能夠能直接查詢一些數據,因此對于用戶,我們給每個數據做了一個網站以

方便用戶查詢(使用ASP.net 建立)

前面我們說了服務是將已有的功能和數據通過接口公開而不需要關心功能和

數據在各自的系統中是如何實現的,因此對功能和數據本身依然可以采用既有

的技術.實現功能和數據部分還是采用三層架構,將Web Service作爲一個獨立的

層(Facade層).框架圖如下:

.Net提供了Asmx文件作爲具體實現的文件.在具體實施的過程中有幾個問題要注意:

l SOAP的格式

Soap是服務锲約的載體,它本身也有一定的格式.對于SOAP中的信封.有兩種格式 Document

通過WebService實現Java與.Net互聯
通過WebService實現Java與.Net互聯
通過Web Service實現java與.net互聯 (將.net程序封裝成爲Web Service,通過Java程序進行調用)Web Service概述什麽是Web Service Web Service是能夠基于網絡,尤其是基于萬維網(World Wide Web)直接...查看完整版>>通過WebService實現Java與.Net互聯
 
通過WebService實現Java與.Net互聯
通過WebService實現Java與.Net互聯
通過Web Service實現java與.net互聯 (將.net程序封裝成爲Web Service,通過Java程序進行調用)Web Service概述什麽是Web Service Web Service是能夠基于網絡,尤其是基于萬維網(World Wide Web)直接...查看完整版>>通過WebService實現Java與.Net互聯
 
6630 通過CMWAP上網實戰記錄
6630 通過CMWAP上網實戰記錄
北京神州行開通了GPRS包月,于是我迫不及待的開通了這一服務,沒有顧慮的體驗了手機上網的樂趣。 衆所周知,中國移動不是菩薩,盡管是包月,但是僅僅是CMWAP,不能用CMNET,所以廣大用戶只有將就一下了,聊勝于無啊...查看完整版>>6630 通過CMWAP上網實戰記錄
 
ERP項目管理實戰談
摘要:ERP項目管理實戰談ERP項目管理實戰談NetReptile推薦 [2005-5-26]出處:項目管理者聯盟作者:柳松 導讀--在有經驗的ERP項目經理眼中,項目管理並非書上講的那麽理論化,重要的是必須抓住項目管理的關鍵點。   ...查看完整版>>ERP項目管理實戰談
 
Mave項目管理實戰演練
Mave項目管理實戰演練作者:李俊傑 Mave項目是開放源代碼公司Apache的又一力作,是項目管理的利器,是針對Ant項目的不足而開發的,除了擁有Ant的構建項目的特色外,還有項目高級管理工具,項目管理者可以輕松地了...查看完整版>>Mave項目管理實戰演練
 
普天東信綜合業務平台項目通過驗收
  日前,杭州市科技局組織有關領導和專家,對東方通信股份有限公司承擔的杭州市重大科技創新項目“IPS6000NGN-3G綜合業務平台”進行了驗收。驗收組專家認爲,東信綜合業務平台項目完成,提供的資料齊全、規範,符合...查看完整版>>普天東信綜合業務平台項目通過驗收
 
人民網強國博客二期項目通過驗收
  近日,由太極計算機股份有限公司承擔建設的人民網強國博客二期項目通過驗收。  人民網強國博客二期項目是人民網網站群的重要組成部分,與強國論壇、人民網新聞等構成人民網主體業務,2006年一季度上線的人民網...查看完整版>>人民網強國博客二期項目通過驗收
 
通過包含文件來組織項目
include()語句給了PHP程序員一個強大的項目管理工具。將一些內容或者布局的思想放到包含文件中可能會使你的開發時間節省無數個小時。(PHP編程中)至少有兩個通用的包含文件,所謂通用,是指必須在任何PHP頁面的頂部...查看完整版>>通過包含文件來組織項目
 
中國通過清潔發展機制項目大幅減少溫室氣體排放
新華社哈爾濱4月17日電(記者呼濤、牛琪)截至2008年2月,中國的CDM(清潔發展機制)項目達到1200個。目前,在聯合國注冊的發展中國家溫室氣體減排項目中,中國占據的比例達到16%,年減排量則接近...查看完整版>>中國通過清潔發展機制項目大幅減少溫室氣體排放
 
 
回到王朝網路移動版首頁