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