顏巧林,周廷美,黃 豐,莫易敏
(武漢理工大學機電工程學院,湖北 武漢 430070)
鐵路機務段擔負著為鐵路運輸提供牽引動力的重要職責[1],在鐵路車、機、工、輛、電等行業(yè)中,具有非常重要的地位[2]。從它的工作內容上看,機務段主要負責機車運用、整備、檢修等作業(yè),為機車質量、安全等分析提供最全面的原始數(shù)據(jù)。
機車在運行途中和整備、檢修過程中積累的原始數(shù)據(jù)是進行機車安全和質量分析的數(shù)據(jù)基礎。計統(tǒng)科、運用科等段內部門,檢修基地、鐵路局等段外部門,都需要獲得機車最基礎的信息,以便進行機車實時狀態(tài)分析?,F(xiàn)階段,機務段活件提報和統(tǒng)計分析都處于純手工階段,與相關部門的信息交流依賴于人工手動傳遞,不能保證活件信息的及時性和準確性。因此,開發(fā)一套適用于機務段機車活件錄入和智能分析的信息系統(tǒng)具有重要的現(xiàn)實意義。
針對以上情況,筆者提出了一種基于WCF(windows communication foundation)的信息共享解決方案。該方案以WCF技術為核心,采用面向服務的分布式分層架構,實現(xiàn)機車活件提報的信息化,可以將員工從繁重的活件錄入和系統(tǒng)分析中解放出來,提高其工作積極性和工作效率。同時,通過與相關部門共享機車活件信息,為需求部門提供實時的機車數(shù)據(jù)分析和質量分析,保障機車質量,確保行車安全。
WCF是基于Windows平臺開發(fā)和部署服務的軟件開發(fā)包,是一個面向服務的分布式分層架構,開發(fā)者可以通過它方便、快捷地搭建一個安全的、事務性的、可信賴的面向服務的企業(yè)級分布式系統(tǒng)架構[3]。該框架旨在統(tǒng)一.NET下各種不同的分布式通信技術(包括ASMX、.NET Remoting、COM+/企業(yè)服務、System.Messaging、MSMQ,以及WSE),實現(xiàn)Web services(WS-*)的所有標準,并在程序設計和架構上遵循面向服務的宗旨,建立面向服務的分布式分層架構。圖1為WCF的體系結構,包括協(xié)定、服務運行時、消息傳遞、激活和承載4 個層[4]。
其中,協(xié)定層定義消息系統(tǒng)的各個方面;服務運行時層包含僅在服務實際運行期間發(fā)生的行為,即該服務的運行時行為;消息傳遞層由通道組成,用于說明數(shù)據(jù)的可能格式和交換模式;激活和承載層指示服務的最終形式是程序。
圖1 WCF體系結構
WCF最重要的要素之一便是契約。通過契約,可以定制WCF所需的通信方式、服務方式,以及用于通信的數(shù)據(jù)信息方式等。契約主要包括:
(1)服務契約。它主要用于指示W(wǎng)CF應用程序中的服務協(xié)議,包括可以提供哪些服務以及該服務的通信方式等[5]。通過服務契約接口的定義,可以將WCF服務接口與用戶實際服務完全分離,服務邏輯、服務內容的更改均不會影響接口的定義,從而達到解松耦合的目的。
(2)數(shù)據(jù)契約。它是一個通信數(shù)據(jù)的約定,通過它可定義或實現(xiàn)一個數(shù)據(jù)協(xié)定,并可由序列化程序(如DataContractSerializer類)進行序列化。
(3)消息契約。它與數(shù)據(jù)契約相似,定義一個與SOA消息相對應的強類型類。用戶可以通過消息契約的自定義格式,對該消息進行自定義傳遞。
(4)錯誤契約。它主要用于指定服務操作遇到處理錯誤時返回的一個或多個SOAP錯誤,并定義如何將該異常傳遞給客戶端。
客戶端與服務端之間的消息交換都是基于端點的,因此,端點是實現(xiàn)WCF通信的核心。WCF允許為服務添加多個綁定和端點。端點主要由3個部分組成,即常說的“ABC”[6]。其中,A 代表地址(address),它是端點的網(wǎng)絡地址,標識了消息發(fā)送的目的地,包括節(jié)點的端口號、IP地址和端口名稱[7-9]。B代表綁定(binding),用于描述消息傳輸協(xié)議(如TCP、HTTP等)和傳輸安全(如SSL、SOAP消息安全等)。C代表契約(contract),用于描述消息所包含的內容以及消息的組織和操作方式,如單工(oneway)、雙工(duplex)和請求/應答(request/reply)。
WCF在具備了服務契約和具體的服務類型后,還需要一個應用程序來承載該服務。
WCF中承載服務的宿主非常靈活,可以是任何.Net應用程序,包括控制臺程序、Windows窗體程序、Web Service服務、Windows服務和互聯(lián)網(wǎng)信息服務(internet information services,IIS)等。
機車活件提報系統(tǒng)主要包括兩部分內容:機車活件錄入模塊和機車活件統(tǒng)計分析模塊。其中,機車活件錄入模塊主要是對機車活件進行編輯,包括活件添加、修改、刪除、查詢、活件導出和導入等功能;機車活件統(tǒng)計分析模塊主要實現(xiàn)按年、月、日、機型車號和部件分別對機車活件進行統(tǒng)計和分析,并生成統(tǒng)計圖表。
由于WCF繼承了SOA的體系結構,因此,基于WCF的機車活件提報系統(tǒng)多層服務模型可以分為:應用程序集、WCF服務層、業(yè)務邏輯層和數(shù)據(jù)訪問層,如圖2所示。并且,當段內或段外其他系統(tǒng)需要訪問機車活件提報系統(tǒng)內的數(shù)據(jù)時,通過共享的WCF服務,即可完成操作。這樣,不但避免了軟件的重開發(fā),又實現(xiàn)了與段內和段外相關部門的信息共享,降低了開發(fā)成本,提高了軟件復用率。
圖2 機車活件提報系統(tǒng)架構
在該服務模型中,各個層的功能如下:
(1)應用程序集。為用戶提供對應程序的訪問界面,用于接收用戶指令,收集用戶提交數(shù)據(jù),并顯示反饋結果。
(2)WCF服務層。為界面層提供服務接口,當用戶添加、修改或刪除活件信息時,實際上是調用WCF服務的接口來達到操作目的。根據(jù)SOA架構思想,通過將服務契約與服務內容分離,可使服務使用者與服務提供者之間共享服務契約而非具體的代碼,減少二者之間的耦合性[4]。
(3)業(yè)務邏輯層。業(yè)務邏輯層是針對WCF服務層建立的。它封裝了實際的業(yè)務邏輯,包括數(shù)據(jù)驗證、事務處理和權限處理等相關操作,不但為上層服務提供數(shù)據(jù)庫調用的各種方法,還為下層數(shù)據(jù)訪問層定義更具體的調用數(shù)據(jù)方法的說明,起著“承上啟下”的作用。實際上,業(yè)務邏輯層是WCF服務層接口的實現(xiàn)[10],它通過真正的服務類繼承服務接口,完成操作代碼的實際編寫。
(4)數(shù)據(jù)訪問層。數(shù)據(jù)訪問層直接與底層的數(shù)據(jù)庫銜接,為業(yè)務組件和底層數(shù)據(jù)提供了一個數(shù)據(jù)交換平臺,并可直接調用數(shù)據(jù)庫中的各種數(shù)據(jù)。此外,它還提供了數(shù)據(jù)信息和數(shù)據(jù)邏輯,使業(yè)務邏輯層只處理業(yè)務邏輯而無需關心底層的數(shù)據(jù)結構。因此,數(shù)據(jù)訪問層封裝了整個系統(tǒng)的數(shù)據(jù)庫訪問邏輯,向業(yè)務邏輯層提供了統(tǒng)一的數(shù)據(jù)庫訪問接口。
3.2.1 契約的建立
一般來說,一個WCF服務契約包括兩個類,稱為IServices類和 Services類[11]。其中 IServices類定義的是服務接口,Services類是實現(xiàn)IService服務中聲明的所有方法。該系統(tǒng)共提供了兩類服務接口:
(1)活件信息編輯服務。服務契約為ILiveWareEditor,實例名稱為單調服務,操作模式為單項操作,服務提供者為機車活件提報系統(tǒng),服務調用者為機車活件提報系統(tǒng)的用戶界面層。其功能是用于活件信息的編輯,包括添加、修改、刪除、查找、導出和導入等。
(2)活件信息統(tǒng)計分析服務。服務契約為ILiveWareAnalyze,實例名稱為單調服務,操作模式為單項操作,服務提供者為機車活件提報系統(tǒng),服務調用者為機車活件提報系統(tǒng)的用戶界面層、段內相關部門和段外相關部門的活件信息統(tǒng)計分析模塊。其功能是按要求對活件信息進行統(tǒng)計分析。
由于機車活件提報系統(tǒng)將在服務器上公布服務契約ILiveWareEditor和ILiveWareAnalyze,而在ILiveWareEditor契約中的LiveWareAdd和LiveWareUpdate服務都需要添加具體的活件信息作為參數(shù),因此,在契約中添加5個數(shù)據(jù)契約,TypeInfor,NumInfor,LiveWareInfor,MethodsInfor 和 Operater-Infor分別用于描述機型信息、車號信息、活件信息、活件處理信息和操作人信息。
部分WCF契約如下:
在Services類中,通過實現(xiàn)IServices中定義的所有方法,即可完成服務契約的設計。
3.2.2 配置服務端點
(1)配置服務端點。使用Service Configuration Editor或手動配置服務端點,為已實現(xiàn)的服務契約關聯(lián)地址和綁定。值得注意的是,在設置服務地址的時候要保證服務地址的唯一性。該系統(tǒng)的服務地址Address為http://202.114.56.183:8000/WCFService,綁定方式 Bingding為 WsHttPBinding,契約 Contract為 Contract.IServices。
(2)服務管理。在部署了服務契約、服務地址和服務綁定之后,需設置如下與服務相關的管理模式:①服務實例管理。由于在實際的系統(tǒng)應用中,活件添加、查詢等操作會被頻繁大量地調用,因此將兩種服務設置為默認的單調服務。②服務操作管理?;罴畔⒕庉嫹蘸突罴畔⒔y(tǒng)計分析服務中的操作很顯然都是單向操作,只需要服務端進行業(yè)務數(shù)據(jù)處理,然后返回操作結果。因此,將這兩個操作設置為默認的請求/應答(request/reply)操作。
3.2.3 宿主程序的建立
使用控制臺程序作為宿主。在啟動宿主程序時,直接開啟服務,即建立了WCF的服務。若需要使用這些服務,只需在開啟該服務后,調用這些顯示在服務器上的服務即可。
由于機車活件統(tǒng)計分析服務將被機車活件提報系統(tǒng)、段內和段外相關統(tǒng)計分析模塊反復調用,因此在調用服務時,要考慮WCF服務的安全性。這里通過在服務器端對客戶端進行用戶名密碼驗證來確認客戶端具備調用某種服務的權限。
服務端用戶名密碼認證采用自定義模式,其代碼為:
這里用戶名密碼的驗證需要訪問數(shù)據(jù)庫中的權限表。因此,需調用數(shù)據(jù)訪問層中訪問數(shù)據(jù)庫的方法。要啟用WCF的自定義驗證功能,還需在服務端配置文件,即app.config中配置Service Behavior,指定服務端驗證模式為 Custom(自定義)[12]。配置文件更改如下:
如此可完成服務端安全認證的設置。
圖3為活件提報系統(tǒng)的活件提報界面。該界面主要完成活件的錄入和提交,為接下來的活件統(tǒng)計分析和機車質量安全分析提供最原始的數(shù)據(jù)。目前,該系統(tǒng)在段內運行良好。
圖3 活件提報系統(tǒng)的活件提報界面圖
基于WCF的活件提報系統(tǒng)開發(fā),大大簡化了開發(fā)和維護的難度。該系統(tǒng)的使用,實現(xiàn)了機車活件提報的半自動化,大大減少了員工的工作量,既提高了工作效率,又降低了勞動成本。此外,WCF技術還實現(xiàn)了相關信息與段內各部門,段外相關部門的共享,可保障機車質量,確保行車安全。
[1] 吳春復,張培彬.鐵路機務段信息系統(tǒng)的設計與實踐[J].內燃機車,2000(9):28-30.
[2] 倪建春.淺談鐵路機務段的標準化工作[J].鐵道技術監(jiān)督,1997(5):13-14.
[3] 沈正.WCF的研究與開發(fā)[J].中國新技術新產品,2009(19):13-14.
[4] 沈正,陳鍾.基于WCF和SOA的電力SCADA系統(tǒng)研究與開發(fā)[J].信息技術,2009(13):17-18.
[5] 李雪東.基于WCF的面向服務架構的研究與應用[D].吉林:長春理工大學圖書館,2008.
[6] 黃森,劉豐.基于WCF的數(shù)據(jù)流傳輸方案研究與應用[J].計算機安全,2009(12):14-18.
[7] 錢濤.基于WCF的機房管理系統(tǒng)的設計與實現(xiàn)[J].計算機技術與自動化,2010(29):135-137.
[8] 程湯培.基于WCF的即時通信軟件的設計與實現(xiàn)[J].電腦編程技巧與維護,2008(4):24-77.
[9] 吳迪,李立新.WCF安全模型的設計與實現(xiàn)[J].網(wǎng)絡安全技術與應用,2008(10):12-14.
[10] 王曄,劉紅.基于WCF技術架構的移動教學信息查詢系統(tǒng)的設計與實現(xiàn)[J].中國教育信息化,2010(9):49-51.
[11] BILL E.C#高級編程[M].4版.李敏波,譯.北京:清華大學出版社,2006:110-111.
[12] 季亮.基于WCF的信息平臺安全技術研究[D].四川:西南交通大學圖書館,2007.