胡興梅 李 玲
摘要:該文在分析和研究了WCF原理特性的基礎(chǔ)上結(jié)合作者多年的ERP系統(tǒng)架構(gòu)與實(shí)現(xiàn)經(jīng)驗(yàn),提出了一種基于WCF的分布式的信息系統(tǒng)的結(jié)構(gòu)模型(B/S/S與C/S/S模型結(jié)構(gòu)),并基于此模型結(jié)構(gòu)設(shè)計(jì)了一種多層的分布式軟件體系架構(gòu),該結(jié)構(gòu)模型與體系架構(gòu)有著更好的靈活性、安全性、可擴(kuò)展性,并且該架構(gòu)模型和體系架構(gòu)支持多種網(wǎng)絡(luò)終端設(shè)備。
關(guān)鍵詞:WCF;結(jié)構(gòu)模型;體系架構(gòu);信息系統(tǒng);B/US/S;C/S/S
中圖分類號(hào):TP393.0文獻(xiàn)標(biāo)識(shí)碼:文章編號(hào):
1 研究背景
全球化競(jìng)爭(zhēng)愈演愈烈,企業(yè)面臨的是全球化的市場(chǎng),全球化的客戶,全球化的運(yùn)作,為了應(yīng)對(duì)這些復(fù)雜多變的挑戰(zhàn),企業(yè)必須不斷提升自身信息系統(tǒng)的敏捷性和適應(yīng)性。為了解決不同平臺(tái)、語(yǔ)言、協(xié)議等的差異,SOA(Service Oriented Architecture,面向服務(wù)架構(gòu))應(yīng)運(yùn)而生。為了支持SOA,微軟推出了WCF(Windows Communication Foundation )Windows通信基礎(chǔ)框架,將微軟所支持的分布式技術(shù)整合到一起,解決了不同網(wǎng)絡(luò)和應(yīng)用環(huán)境下的數(shù)據(jù)和操作的共享以及異構(gòu)系統(tǒng)間的跨平臺(tái)訪問(wèn)與操作等問(wèn)題[1]。
另外,隨著Internet和Intranet應(yīng)用的不斷普及,應(yīng)用系統(tǒng)尤其是以ERP(企業(yè)資源計(jì)劃)系統(tǒng)為代表的信息系統(tǒng)的不斷擴(kuò)大以及系統(tǒng)用戶數(shù)量的幾何倍數(shù)增長(zhǎng),現(xiàn)有信息系統(tǒng)B/S或C/S的模型結(jié)構(gòu)和體系架構(gòu)存在很多弊端,表現(xiàn)在事務(wù)規(guī)格處理層位置不明確、安全性受到威脅、能連接的客戶端數(shù)目有限、可擴(kuò)展性較差等。
因此,本文將在研究WCF的技術(shù)的基礎(chǔ)上設(shè)計(jì)出一種可靠的信息系統(tǒng)的結(jié)構(gòu)模型和體系架構(gòu)。
2 WCF相關(guān)技術(shù)研究
2.1 WCF
目前,基于Web Service的分布式信息系統(tǒng)已經(jīng)能較好地解決跨平臺(tái)和異構(gòu)空間數(shù)據(jù)的互操作問(wèn)題,被普遍認(rèn)為是下一代分布式系統(tǒng)開(kāi)發(fā)的模型。但是這個(gè)框架在通訊安全和性能等方面存在難以解決的問(wèn)題。后來(lái)出現(xiàn)的WSE彌補(bǔ)了安全性的不足,但是這個(gè)框架還未被廣泛推廣,客戶端開(kāi)發(fā)人員開(kāi)發(fā)有難度。.NET Remoting技術(shù)解決了性能的問(wèn)題,但是它不可以實(shí)現(xiàn)跨平臺(tái)的操作,這樣其實(shí)用性有限。MSMQ支持消息隊(duì)列,但需要整合在其他系統(tǒng)中,傳統(tǒng)的Enterprise Service支持分布式事務(wù),但是又不可以跨平臺(tái)。WCF整合了Web Service、WSE、.NET Remoting、Enterprise Service(COM+)等技術(shù)的優(yōu)點(diǎn)[2],是分布式應(yīng)用程序開(kāi)發(fā)技術(shù)的集成者,解決了上面提出的一系列問(wèn)題。它并非是各種技術(shù)的簡(jiǎn)單的并集,是真正的面向服務(wù)的產(chǎn)品。
WCF是基于SOA推出的.Net平臺(tái)下的新產(chǎn)品。根據(jù)微軟官方的解釋,WCF是使用托管代碼建立和運(yùn)行面向服務(wù)應(yīng)用程序的統(tǒng)一框架。它使得開(kāi)發(fā)者能夠建立一個(gè)跨平臺(tái)的安全、可信賴、事務(wù)性的解決方案,且能與已有系統(tǒng)兼容協(xié)作[3]。
2.2 WCF的體系架構(gòu)
WCF提供了對(duì)可靠性、事務(wù)性、并發(fā)管理、安全性以及實(shí)例激活等技術(shù)的有力支持,它們均依賴于基于攔截機(jī)制的WCF體系框架。
在客戶端,代理將序列化后的消息通過(guò)通道鏈向下傳,每個(gè)通道相當(dāng)于一個(gè)攔截器,通道將其攔截后執(zhí)行特定的任務(wù)。最后消息通過(guò)一個(gè)傳輸通道,根據(jù)配置的傳輸方式發(fā)送給宿主(負(fù)責(zé)公開(kāi)終結(jié)點(diǎn))。
在宿主端,消息先通過(guò)傳輸通道接收,再通過(guò)一系列通道,執(zhí)行不同的任務(wù),如消息正文的解密、消息的解碼、設(shè)置安全準(zhǔn)則、管理會(huì)話、激活服務(wù)實(shí)例。宿主端的最后一個(gè)通道負(fù)責(zé)將消息傳遞給分發(fā)器。分發(fā)器將消息轉(zhuǎn)換到一個(gè)棧幀,并調(diào)用服務(wù)實(shí)例。服務(wù)實(shí)例執(zhí)行調(diào)用,然后將控制權(quán)返回給分發(fā)器。分發(fā)器將返回值或者錯(cuò)誤信息轉(zhuǎn)換為一條返回消息。執(zhí)行過(guò)程與接收消息時(shí)的處理剛好相反,如管理事物、停用實(shí)例、回復(fù)消息的編碼和加密等。執(zhí)行過(guò)程如圖1所示[4]:
3 基于WCF的信息系統(tǒng)的結(jié)構(gòu)模型設(shè)計(jì)
在研究了大多數(shù)諸如ERP等信息系統(tǒng)的結(jié)構(gòu)模型的基礎(chǔ)上,結(jié)合WCF的技術(shù)優(yōu)勢(shì),本文提出了下面一種信息系統(tǒng)的結(jié)構(gòu)模型,如圖2所示:
從分布式應(yīng)用的角度來(lái)說(shuō),這種結(jié)構(gòu)模型將信息系統(tǒng)分為三個(gè)層次:
1) 服務(wù)器。服務(wù)器是服務(wù)的最終提供者,它采用了WCF服務(wù)。
根據(jù)信息系統(tǒng)的需求創(chuàng)建一系列的WCF服務(wù)之后,若要公開(kāi)WCF服務(wù)也就是讓服務(wù)的消費(fèi)者能夠請(qǐng)求服務(wù),則服務(wù)器需要提供一個(gè)運(yùn)行服務(wù)的宿主環(huán)境,就像.NET CLR需要?jiǎng)?chuàng)建宿主環(huán)境以托管代碼一樣,WCF的宿主環(huán)境同樣運(yùn)行在進(jìn)程的應(yīng)用程序域中。一個(gè)包含成千上萬(wàn)WCF服務(wù)的服務(wù)器可以只有一個(gè)宿主,但也可以根據(jù)需要或者分類創(chuàng)建幾個(gè)宿主,每個(gè)宿主分管不同類型的服務(wù)。宿主是WCF服務(wù)提供服務(wù)的載體,在本文的第一節(jié)已經(jīng)簡(jiǎn)單地介紹了WCF服務(wù)的服務(wù)機(jī)制,而客戶端(服務(wù)的消費(fèi)者)需要請(qǐng)求服務(wù)器提供的WCF服務(wù),則它需要知道服務(wù)的終結(jié)點(diǎn)。服務(wù)的載體—宿主會(huì)公布它能提供的所有服務(wù)的終結(jié)點(diǎn),它包含服務(wù)的Address、Binding和Contract。Address(地址):WCF的每個(gè)服務(wù)都有一個(gè)唯一的地址,包括目標(biāo)機(jī)器名、站點(diǎn)或網(wǎng)絡(luò)、通信端口、管道或隊(duì)列,以及一個(gè)可選的特定路徑或者URI。同一個(gè)服務(wù)上的所有終結(jié)點(diǎn)都具有相同的地址。Binding(綁定):它定義了服務(wù)端與客戶端交互的底層細(xì)節(jié),包括數(shù)據(jù)如何傳輸(如采用的TCP,HTTP協(xié)議等),如何解決安全問(wèn)題(如SSL, Message Level Security等),傳輸?shù)南⒌母袷?如Text/Xml, binary等)。Contract(契約):WCF的所有服務(wù)都公開(kāi)為契約。契約與平臺(tái)無(wú)關(guān),是描述服務(wù)功能的標(biāo)準(zhǔn)方式,它是事先制定好的應(yīng)用程序之間交換數(shù)據(jù)的規(guī)則[4]。
2) 中間服務(wù)器。服務(wù)的直接消費(fèi)者。
由于采用最終客戶端直接使用服務(wù)器提供服務(wù)的B/S或C/S結(jié)構(gòu)模型存在很多弊端,故本次研究將采用B/S/S(瀏覽器/中間服務(wù)器/服務(wù)器)和C/S/S(客戶端/中間服務(wù)器/服務(wù)器)的結(jié)構(gòu)。中間服務(wù)器包含“WEB服務(wù)器”和“其他中間服務(wù)器”等。“Web服務(wù)器”和“Web客戶端”之間采用B/S結(jié)構(gòu),他們之間的通訊協(xié)議將以傳統(tǒng)的http、https為主,這就是B/S/S 的結(jié)構(gòu)模型。“其他中間服務(wù)器”和客戶端之間采用C/S結(jié)構(gòu),他們之間的通訊協(xié)議以TCP/IP、MSMQ消息隊(duì)列等為主,這就是C/S/S 的結(jié)構(gòu)模型。
3) 客戶端。客戶端是服務(wù)的最終消費(fèi)者。
該模型的三個(gè)層次中客戶端與服務(wù)器的概念并不是一成不變的,它們?cè)谝欢ǖ沫h(huán)境和業(yè)務(wù)情境下是相互轉(zhuǎn)化的。首先,“Web服務(wù)器”和“其他中間服務(wù)器”對(duì)于最終的客戶端來(lái)說(shuō),它們是最終客戶端的服務(wù)器,而對(duì)于WCF服務(wù)來(lái)說(shuō),它們又是WCF服務(wù)的直接消費(fèi)者,因此它們相對(duì)于提供WCF的宿主來(lái)說(shuō),它們又是客戶端;其次,WCF服務(wù)的宿主和“Web服務(wù)器”或“其他中間服務(wù)器”之間的服務(wù)器/客戶端的關(guān)系也可以是相互的,比如對(duì)于某些回調(diào)的情形,客戶端向服務(wù)器(Host)請(qǐng)求某項(xiàng)服務(wù),而服務(wù)器端在收到請(qǐng)求后需要回調(diào)客戶端的另一項(xiàng)服務(wù),這時(shí),服務(wù)器與客戶端的角色就轉(zhuǎn)化了。
本文研究并設(shè)計(jì)的這種基于WCF的信息系統(tǒng)結(jié)構(gòu)模型具有簡(jiǎn)單明了、便于管理和維護(hù)等基本優(yōu)點(diǎn),還有其獨(dú)特的優(yōu)點(diǎn):
1) 由于采取了不同的中間服務(wù)器,使得不同形式與智能級(jí)別的客戶端能夠同時(shí)請(qǐng)求服務(wù),高端的桌面服務(wù)器與個(gè)人計(jì)算機(jī)可以通過(guò)“Web服務(wù)器”向提供WCF服務(wù)的服務(wù)器端請(qǐng)求服務(wù),而低端的諸如Pocket PC、IP Phone、Mobile Phone、PDA(個(gè)人數(shù)字助理)甚至單片機(jī)等嵌入式終端可以通過(guò)其它專用的中間服務(wù)器請(qǐng)求服務(wù)。尤其是第三代通訊技術(shù)以及通訊設(shè)備的不斷完善,我們可以結(jié)合先進(jìn)的第三代通訊技術(shù)將信息系統(tǒng)的應(yīng)用擴(kuò)展到這些終端設(shè)備,將信息系統(tǒng)的應(yīng)用擴(kuò)展到真正的移動(dòng)商務(wù)。
2) 便于擴(kuò)展與二次開(kāi)發(fā)。由于WCF服務(wù)跨平臺(tái)、安全性佳等優(yōu)點(diǎn),只要服務(wù)的提供者發(fā)布了服務(wù)的終結(jié)點(diǎn),服務(wù)的消費(fèi)者就可以請(qǐng)求服務(wù)(本次研究暫不考慮WCF服務(wù)器與客戶端的認(rèn)證機(jī)制),則WCF服務(wù)的消費(fèi)者可以方便地在此基礎(chǔ)上進(jìn)行二次開(kāi)發(fā)。
4 基于WCF的信息系統(tǒng)的體系架構(gòu)設(shè)計(jì)
在研究并設(shè)計(jì)了上文所述的信息系統(tǒng)的結(jié)構(gòu)模型之后,本文以ERP系統(tǒng)為例深入分析了目前信息系統(tǒng)的設(shè)計(jì)目標(biāo):主要是實(shí)現(xiàn)子公司ERP系統(tǒng)之間以及總公司ERP系統(tǒng)與子公司ERP系統(tǒng)之間的協(xié)同與協(xié)作,實(shí)現(xiàn)數(shù)據(jù)與應(yīng)用的共享、互操作與信息融合,能夠?qū)崿F(xiàn)企業(yè)未來(lái)的發(fā)展對(duì)ERP擴(kuò)展的應(yīng)用要求。根據(jù)WCF的特性,結(jié)合面向?qū)ο笠约懊嫦蚍?wù)的設(shè)計(jì)思想,基于組件的設(shè)計(jì)能夠方便的修改、方便進(jìn)行二次開(kāi)發(fā)等特性的需要,所以本次研究在目前較為流行的多層架構(gòu)的設(shè)計(jì)思想上將信息系統(tǒng)設(shè)計(jì)成包含WCF服務(wù)層在內(nèi)的更加完善的體系架構(gòu),如圖3所表示:
這樣的分層架構(gòu)具有邏輯功能更清晰、層間低耦合、層內(nèi)高內(nèi)聚、可重用性高等優(yōu)勢(shì),還具有以下優(yōu)點(diǎn):
1) 安全性更高。首先中間層隔離了服務(wù)的請(qǐng)求者對(duì)數(shù)據(jù)的直接訪問(wèn),接著由于系統(tǒng)采用WCF服務(wù)作為對(duì)外的接口,可以使用WCF的安全機(jī)制更大地提高系統(tǒng)的安全性。
2) 響應(yīng)速度更快。通過(guò)負(fù)載均衡以及中間層緩存數(shù)據(jù)能力,可以提高客戶端的響應(yīng)速度,這表現(xiàn)在:數(shù)據(jù)訪問(wèn)層和實(shí)體模型層上,實(shí)體模型層即使持久層,可以采用Hibernate等持久性框架實(shí)現(xiàn)實(shí)體模型層和數(shù)據(jù)訪問(wèn)層。對(duì)于大型信息系統(tǒng)來(lái)說(shuō),可以采用服務(wù)器端緩存以及客戶端緩存的雙緩存機(jī)制來(lái)提高數(shù)據(jù)的訪問(wèn)速度。
3) 可維護(hù)性更強(qiáng)。當(dāng)業(yè)務(wù)邏輯改變時(shí)只需要對(duì)中間業(yè)務(wù)邏輯進(jìn)行維護(hù)。
4) 人員分工明確。有利于各種應(yīng)用開(kāi)發(fā)人員的協(xié)同工作,發(fā)揮各自的優(yōu)勢(shì)。
5) 系統(tǒng)擴(kuò)展靈活。規(guī)模需要增大只需在中間層部署更多的服務(wù)器,客戶端完全透明。
6) 對(duì)異種數(shù)據(jù)庫(kù)或數(shù)據(jù)源的支持性高。
7) 事務(wù)與元數(shù)據(jù)機(jī)制。由于系統(tǒng)采用了WCF服務(wù)并將WCF服務(wù)作為一個(gè)獨(dú)立的功能層來(lái)設(shè)計(jì),WCF 提供能夠在 Web 服務(wù)應(yīng)用程序中創(chuàng)建分布式事務(wù)。另外,WCF 服務(wù)使用元數(shù)據(jù)來(lái)描述如何與服務(wù)的終結(jié)點(diǎn)進(jìn)行交互,以便類似 Svcutil.exe(微軟提供的自動(dòng)生成客戶端代碼的工具)的工具可以自動(dòng)生成訪問(wèn)服務(wù)的客戶端代碼[5]。
在簡(jiǎn)單介紹了本文設(shè)計(jì)的體系架構(gòu)的優(yōu)勢(shì)后,以下是各層的簡(jiǎn)單描述:
1) 數(shù)據(jù)層。數(shù)據(jù)層就是指數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)是一切業(yè)務(wù)邏輯的起點(diǎn)或歸宿[6]。
2) 實(shí)體模型層。在實(shí)體模型層,對(duì)數(shù)據(jù)庫(kù)中的實(shí)體對(duì)象進(jìn)行持久化,封裝成一個(gè)個(gè)實(shí)體模型。我們可以將信息系統(tǒng)的實(shí)體如員工實(shí)體封裝為一個(gè)個(gè)的面向?qū)ο蟮念?Class),并在每個(gè)類和數(shù)據(jù)庫(kù)對(duì)應(yīng)的表之間建立對(duì)象關(guān)系映射(O/R Mapping)。
3) 數(shù)據(jù)訪問(wèn)層。數(shù)據(jù)訪問(wèn)層根據(jù)業(yè)務(wù)邏輯層的需要,調(diào)用數(shù)據(jù)持久層組件方法,以面向?qū)ο蟮姆绞酵瓿蓪?duì)象持久化操作封裝。本層開(kāi)發(fā)人員不需知道數(shù)據(jù)庫(kù)底層結(jié)構(gòu),甚至不需知道數(shù)據(jù)庫(kù)的存在。所有對(duì)數(shù)據(jù)庫(kù)的操作,都調(diào)用了持久層組件。數(shù)據(jù)訪問(wèn)層和實(shí)體模型層應(yīng)當(dāng)建立某種緩存機(jī)制以便提高系統(tǒng)對(duì)數(shù)據(jù)的訪問(wèn)效率。
4) 基本業(yè)務(wù)操作層。本層中的類方法與數(shù)據(jù)訪問(wèn)子層的類基本是對(duì)應(yīng)的。當(dāng)基礎(chǔ)業(yè)務(wù)邏輯層調(diào)用數(shù)據(jù)訪問(wèn)子層的方法時(shí),必須先驗(yàn)證數(shù)據(jù)有效性,本層將完成此類工作。
5) WCF服務(wù)層。在WCF服務(wù)層,可以將每種服務(wù)都封裝成一個(gè)類,實(shí)現(xiàn)對(duì)業(yè)務(wù)實(shí)體對(duì)象的操作,處理不同的用戶請(qǐng)求,并發(fā)布每個(gè)服務(wù)的契約。而所有的服務(wù)類都繼承于“基礎(chǔ)服務(wù)類”,因?yàn)楦鞣N服務(wù)都有一些相同的功能,可以封裝到一個(gè)類中。
6) 在Web服務(wù)端或其他中間服務(wù)端,通過(guò)創(chuàng)建 Web站點(diǎn)或Windows應(yīng)用程序,為服務(wù)的最終用戶提供服務(wù),并可以與服務(wù)端系統(tǒng)進(jìn)行交互,完成各種業(yè)務(wù)處理和數(shù)據(jù)存取。WEB服務(wù)器或其他中間服務(wù)端調(diào)用WCF服務(wù)以滿足用戶的各種操作請(qǐng)求。
5 總結(jié)
本文通過(guò)對(duì)WCF技術(shù)的分析與探討,結(jié)合對(duì)目前信息系統(tǒng)的結(jié)構(gòu)模型以及體系架構(gòu)的研究,提出了一種新的基于WCF的信息系統(tǒng)的結(jié)構(gòu)模型與體系架構(gòu),該結(jié)構(gòu)能提高系統(tǒng)的適應(yīng)性、可擴(kuò)展性以及安全性等性能,客戶還可以根據(jù)需要自由進(jìn)行二次開(kāi)發(fā)。
作者正在按照文中研究和設(shè)計(jì)的結(jié)構(gòu)模型與體系架構(gòu)開(kāi)發(fā)一種構(gòu)建這種體系架構(gòu)的信息系統(tǒng)的可視化開(kāi)發(fā)平臺(tái)。當(dāng)然,隨著技術(shù)和設(shè)計(jì)理念的不斷進(jìn)步,這種結(jié)構(gòu)模型與體系架構(gòu)應(yīng)該得到不斷的完善。
參考文獻(xiàn):
[1] 陳德權(quán),鄔群勇,王欽敏.基于WCF的分布式地理信息系統(tǒng)研究[J].測(cè)繪信息與工程,2008,33(3):21-23.
[2] 閆冰.基于WCF的分布式應(yīng)用開(kāi)發(fā)[J].電腦知識(shí)與技術(shù),2008(3):68-70.
[3] 黃攀.基于IHELAB-TF的系統(tǒng)信息集成應(yīng)用研究[D].北京交通大學(xué),2007.
[4] Juval Lowy,著.Clemens Vasters,序.張逸,徐寧,譯.WCF服務(wù)編程[M].北京:機(jī)械工業(yè)出版社,2008:16-30,57-58.
[5] 微軟技術(shù)支持庫(kù)[EB/OL].(2009-04-10).http://msdn.microsoft.com/zh-cn/library/ms735093.aspx.
[6] 陳龍.IC卡流量表的移動(dòng)維修系統(tǒng)研究與設(shè)計(jì)[D].武漢理工大學(xué),2008.