白凱
(西安職業(yè)技術(shù)學(xué)院 陜西 西安 710077)
陜西生產(chǎn)管理系統(tǒng)(簡(jiǎn)稱生產(chǎn)系統(tǒng))就是要解決適應(yīng)電網(wǎng)特性的跨地域、集團(tuán)化、網(wǎng)絡(luò)化的應(yīng)用,規(guī)范電網(wǎng)生產(chǎn)業(yè)務(wù)、優(yōu)化管理流程,統(tǒng)一數(shù)據(jù)格式,信息共享,做到信息傳遞的及時(shí)、可靠和準(zhǔn)確,加強(qiáng)過程管理和監(jiān)督,提高工作質(zhì)量和工作效率;最終提高電網(wǎng)安全生產(chǎn)水平,提高電網(wǎng)運(yùn)行效率和效益以及電網(wǎng)管理水平。
生產(chǎn)系統(tǒng)主要業(yè)務(wù)包括設(shè)備管理、運(yùn)行管理(變電/送電/電纜)、檢修管理、兩票管理、技術(shù)監(jiān)督管理、大修管理、技改管理、科技管理、工器具管理等業(yè)務(wù)。以實(shí)現(xiàn)電網(wǎng)生產(chǎn)的規(guī)范化管理為目標(biāo),采用可定制的流程化作業(yè)方式推動(dòng)和監(jiān)控各項(xiàng)業(yè)務(wù)的進(jìn)行,服務(wù)于全省電網(wǎng)的生產(chǎn)管理全過程。
生產(chǎn)系統(tǒng)數(shù)據(jù)以地區(qū)局集中方式統(tǒng)一存放,形成各地區(qū)局電網(wǎng)生產(chǎn)數(shù)據(jù)中心和業(yè)務(wù)處理中心,各班組/變電站以網(wǎng)絡(luò)/遠(yuǎn)程用戶用瀏覽器方式訪問和工作,省公司建立全省電網(wǎng)生產(chǎn)管理的數(shù)據(jù)中心、決策分析中心和各局?jǐn)?shù)據(jù)的異地備份中心。系統(tǒng)以B/S三層架構(gòu)實(shí)現(xiàn),以組件化、模塊化進(jìn)行應(yīng)用開發(fā),用戶只要采用瀏覽器方式就可高效運(yùn)行。
本文就生產(chǎn)管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)中的三層架構(gòu)及應(yīng)用,分布式系統(tǒng)設(shè)計(jì)與系統(tǒng)接口實(shí)現(xiàn)、平臺(tái)部分總體設(shè)計(jì),消息組件設(shè)計(jì)與實(shí)現(xiàn)等4部分進(jìn)行詳細(xì)討論。
隨著軟件系統(tǒng)的規(guī)模與復(fù)雜性的增加,軟件體系結(jié)構(gòu)的選擇成為比數(shù)據(jù)結(jié)構(gòu)和算法的選擇更為重要的因素,三層客戶/服務(wù)器體系結(jié)構(gòu)為企業(yè)資源規(guī)劃整合提供了良好的框架,是建立企業(yè)級(jí)管理信息系統(tǒng)的最佳選擇。由于生產(chǎn)系統(tǒng)涵蓋全省輸變電電力業(yè)務(wù),邏輯多且復(fù)雜,用戶遍布全省生產(chǎn)業(yè)務(wù)的方方面面,所以采用B/S結(jié)構(gòu)的三層架構(gòu)系統(tǒng)是必然的選擇。
生產(chǎn)系統(tǒng)采用三層客戶/服務(wù)器模式(圖1),是因?yàn)樵摻Y(jié)構(gòu)是解決目前企業(yè)級(jí)系統(tǒng)的成熟方案[1]。同樣也具有成熟的開發(fā)模式。這種模式在邏輯上將應(yīng)用功能分為3層:客戶顯示層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問層。客戶顯示層是為客戶提供應(yīng)用服務(wù)的圖形界面,有助于用戶理解和高效的定位應(yīng)用服務(wù)。業(yè)務(wù)邏輯層位于客戶顯示層和數(shù)據(jù)訪問層之間,專為實(shí)現(xiàn)企業(yè)的業(yè)務(wù)邏輯提供一個(gè)明確的層次,這個(gè)層次封裝了與系統(tǒng)關(guān)聯(lián)的應(yīng)用模型,并把用戶表示層和數(shù)據(jù)庫代碼分開[2]。這個(gè)層次提供客戶應(yīng)用程序和數(shù)據(jù)服務(wù)之間的聯(lián)系,主要是執(zhí)行應(yīng)用策略和封裝應(yīng)用模式,并將封裝的模式呈現(xiàn)給客戶應(yīng)用程序。而數(shù)據(jù)訪問層是三層模式中最底層,它用來定義、維護(hù)、訪問和更新數(shù)據(jù)并管理和滿足應(yīng)用服務(wù)對(duì)數(shù)據(jù)的請(qǐng)求[3]。
圖1三層客戶/服務(wù)器模式Fig.1 Three-tier client/server module
Microsoft.Net平臺(tái)包括用于創(chuàng)建和操作新一代服務(wù)的.Net基礎(chǔ)結(jié)構(gòu)和工具,用于建立新一代高度分布式的數(shù)以百萬計(jì)的.Net積木式組建服務(wù)[4]。NET框架為局域網(wǎng) (LAN)和Internet上的分布式企業(yè)應(yīng)用提供了一致和有效的支持。陜西電網(wǎng)安全生產(chǎn)系統(tǒng)則充分利用上述特點(diǎn),采用ASP.NET技術(shù)與Windows 2003 Server的完美結(jié)合,快速、高效、安全地建立了基于廣域網(wǎng)的分布式全省電網(wǎng)安全生產(chǎn)系統(tǒng)。
分布式軟件系統(tǒng)(Distributed Software Systems)是支持分布式處理的軟件系統(tǒng),是在由通信網(wǎng)絡(luò)互聯(lián)的多服務(wù)器體系結(jié)構(gòu)上執(zhí)行任務(wù)的系統(tǒng)。分布式系統(tǒng)是由若干個(gè)節(jié)點(diǎn)集合而成。它們?cè)谕ㄐ啪W(wǎng)絡(luò)中聯(lián)接在一起,每個(gè)節(jié)點(diǎn)都是一個(gè)獨(dú)立的業(yè)務(wù)系統(tǒng),它們都擁有各自的運(yùn)行程序、客戶端,以及各自的局部數(shù)據(jù)庫管理系統(tǒng)。因此分布式系統(tǒng)可以看作是一系列集中式系統(tǒng)的聯(lián)合。它們?cè)谶壿嬌蠈儆谕幌到y(tǒng),但在物理結(jié)構(gòu)上是分布式的。
分布式系統(tǒng)已經(jīng)成為信息處理的重要研究方向,原因基于以下幾點(diǎn):
1)它可以解決組織機(jī)構(gòu)分散而數(shù)據(jù)需要相互聯(lián)系的問題。生產(chǎn)系統(tǒng),省電力公司與各地區(qū)供電局處于不同的城市或城市中的各個(gè)地區(qū),在業(yè)務(wù)上它們需要處理各自的數(shù)據(jù),也需要彼此之間的交換和處理,這就需要分布式的系統(tǒng);
2)如果一個(gè)組織機(jī)構(gòu)需要增加新的相對(duì)自主的組織單位來擴(kuò)充機(jī)構(gòu),則分布式數(shù)據(jù)庫系統(tǒng)可以在對(duì)當(dāng)前機(jī)構(gòu)影響最小的情況下進(jìn)行擴(kuò)充;
3)均衡負(fù)載的需要。數(shù)據(jù)的分解采用使局部應(yīng)用達(dá)到最大,這使得各服務(wù)器之間的相互干擾降到最低。負(fù)載在各服務(wù)器之間分擔(dān),可以避免臨界瓶頸;
4)當(dāng)現(xiàn)有機(jī)構(gòu)中已存在多個(gè)數(shù)據(jù)庫系統(tǒng),而且實(shí)現(xiàn)全局應(yīng)用的必要性增加時(shí),就可以由這些數(shù)據(jù)庫自下而上構(gòu)成分布式數(shù)據(jù)庫系統(tǒng);
5)相等規(guī)模的分布式數(shù)據(jù)庫系統(tǒng)在出現(xiàn)故障的幾率上不會(huì)比集中式數(shù)據(jù)庫系統(tǒng)低,但由于其故障的影響僅限于局部數(shù)據(jù)應(yīng)用,因此就整個(gè)系統(tǒng)來講,其可靠性比較高。
在電力廣域網(wǎng)中,地區(qū)供電局作為全省電網(wǎng)生產(chǎn)管理的業(yè)務(wù)處理中心和數(shù)據(jù)中心,各班組和縣局作為地區(qū)局的遠(yuǎn)程工作站進(jìn)行業(yè)務(wù)處理,而省公司作為全省的業(yè)務(wù)監(jiān)管中心和數(shù)據(jù)備份中心指導(dǎo)基層單位的電網(wǎng)生產(chǎn)管理,保證全省電網(wǎng)生產(chǎn)數(shù)據(jù)的安全。陜西省電力公司和供電局之間的數(shù)據(jù)傳輸利用已經(jīng)建立的廣域網(wǎng)。陜西省電力公司和各個(gè)供電局通過各自的局域網(wǎng)訪問各自的系統(tǒng)。
在這樣的分布式體統(tǒng)中,其中一個(gè)節(jié)點(diǎn)發(fā)生問題,并不影響其他節(jié)點(diǎn)的運(yùn)行。同時(shí)由于每個(gè)節(jié)點(diǎn)都有可以獨(dú)立運(yùn)行的生產(chǎn)系統(tǒng),這樣系統(tǒng)的負(fù)載壓力就平均分?jǐn)偟搅烁鱾€(gè)節(jié)點(diǎn)上。同時(shí)當(dāng)一個(gè)供電局的組織結(jié)構(gòu)發(fā)生變化時(shí)也便于更改和擴(kuò)充,同時(shí)對(duì)它供電局的生產(chǎn)系統(tǒng)沒有任何影響。圖2為分布式系統(tǒng)中的電網(wǎng)生產(chǎn)系統(tǒng)結(jié)構(gòu)框圖。
處于分布式系統(tǒng)中的電網(wǎng)生產(chǎn)系統(tǒng)通過Web Services技術(shù)相互傳輸數(shù)據(jù),進(jìn)行省公司生產(chǎn)系統(tǒng)和各個(gè)供電局生產(chǎn)系統(tǒng)的數(shù)據(jù)交換。同樣的通過該技術(shù)對(duì)門戶、ERP、數(shù)據(jù)中心接口提供生產(chǎn)運(yùn)行數(shù)據(jù)支持。
圖2分布式系統(tǒng)中的電網(wǎng)生產(chǎn)系統(tǒng)Fig.2 Power network production system for distributed system
系統(tǒng)平臺(tái)部分是生產(chǎn)系統(tǒng)應(yīng)用程序的核心部分。平臺(tái)部分程序基本上都是通過Microsoft Visual Studio 2005開發(fā)完成的。這部分是整個(gè)生產(chǎn)系統(tǒng)運(yùn)行的基礎(chǔ),各個(gè)業(yè)務(wù)模塊通過平臺(tái)部分構(gòu)建的中間層訪問數(shù)據(jù)庫實(shí)現(xiàn)業(yè)務(wù)邏輯。通過平臺(tái)搭建的系統(tǒng)框架將各個(gè)業(yè)務(wù)模塊進(jìn)行繼承,通過平臺(tái)提供的權(quán)限對(duì)用戶和模塊進(jìn)行授權(quán)。業(yè)務(wù)模塊的流轉(zhuǎn)也是通過平臺(tái)工作流引擎來推動(dòng)的。也就是說平臺(tái)部分是電網(wǎng)生產(chǎn)系統(tǒng)最核心的部分。圖3為系統(tǒng)平臺(tái)。
圖3系統(tǒng)平臺(tái)Fig.3 System platform
系統(tǒng)平臺(tái)提供業(yè)務(wù)對(duì)數(shù)據(jù)庫訪問的實(shí)體層,對(duì)數(shù)據(jù)庫的訪問進(jìn)行封裝并統(tǒng)一提供訪問接口。各業(yè)務(wù)模塊通過對(duì)接口數(shù)據(jù)庫進(jìn)行訪問,不允許各業(yè)務(wù)直接訪問數(shù)據(jù)庫。這部分功能是通過Microsoft ADO.NET及時(shí)實(shí)現(xiàn)的。ADO.NET提供對(duì)ORACLE、SQLAERVER等公開數(shù)據(jù)源的一致性訪問。ADO.NET提供了平臺(tái)互用性和可伸縮的數(shù)據(jù)訪問。由于傳送的數(shù)據(jù)都是XML格式的,因此任何能夠讀取XML格式的應(yīng)用程序都可以進(jìn)行數(shù)據(jù)處理。
系統(tǒng)平臺(tái),提供系統(tǒng)通用的變量。公共變量通過session保存,并提供給各個(gè)業(yè)務(wù)模塊。系統(tǒng)平臺(tái)提供系統(tǒng)統(tǒng)一的界面設(shè)計(jì),提供統(tǒng)一的樣式表給各個(gè)業(yè)務(wù)模塊引用,統(tǒng)一的樣式是通過CSS(Cascading Style Sheets層疊樣式表)技術(shù)實(shí)現(xiàn)的。CSS語言是一種標(biāo)記語言,它不需要編譯,可以直接由瀏覽器執(zhí)行。可以通過簡(jiǎn)單的更改CSS文件,改變網(wǎng)頁的整體表現(xiàn)形式,這樣可以減少界面設(shè)計(jì)的工作量。同時(shí)由于引用了一個(gè)樣式文件,這樣整個(gè)系統(tǒng)就統(tǒng)一了界面風(fēng)格。設(shè)計(jì)界面時(shí)在HTML頁面引用CSS文件就可以了。
系統(tǒng)平臺(tái)構(gòu)建業(yè)務(wù)模塊的基類。系統(tǒng)基類提供每個(gè)模塊需要繼承的方法。電網(wǎng)生產(chǎn)系統(tǒng)是通過面向?qū)ο蟮募夹g(shù)進(jìn)行設(shè)計(jì)和實(shí)現(xiàn)的,那么就要平臺(tái)提供整個(gè)應(yīng)用系統(tǒng)的基類?;愔刑峁┝私涌诜椒ǎ鱾€(gè)業(yè)務(wù)模塊通過繼承和重載方法就可以使用了。同時(shí)基類也實(shí)現(xiàn)了具體的功能方法如:權(quán)限控制、日志寫入等。各個(gè)業(yè)務(wù)模塊只需要繼承基類就可以方便實(shí)現(xiàn)上述功能。
系統(tǒng)平臺(tái)搭建系統(tǒng)應(yīng)用框架,完成對(duì)應(yīng)用框架進(jìn)行總體設(shè)計(jì)。系統(tǒng)平臺(tái)提供的應(yīng)用模塊有:用戶管理、職工管理、典型角色管理、崗位角色管理、實(shí)例化管理、機(jī)構(gòu)管理、模塊注冊(cè)管理、權(quán)限綜合查詢管理、變電站關(guān)系管理、日志查詢、日志統(tǒng)計(jì)、用戶密碼修改、意見建立交流、幫助管理等模塊。平臺(tái)的程序基本上都是用C#語言開發(fā)的。
系統(tǒng)平臺(tái)對(duì)整個(gè)應(yīng)用系統(tǒng)的權(quán)限進(jìn)行管理和授權(quán),提供平臺(tái)公用的方法給各個(gè)業(yè)務(wù)調(diào)用。權(quán)限主要管理用戶、角色、模塊之間的關(guān)系,以及與工作流之間的關(guān)系等。而與用戶相關(guān)的權(quán)限主要有用戶管理、職工管理、部門機(jī)構(gòu)管理;與角色相關(guān)的權(quán)限主要有典型角色管理、崗位角色管理、實(shí)例化角色管理;與模塊相關(guān)的權(quán)限有模塊管理。
系統(tǒng)平臺(tái)提供工作流引擎,各個(gè)模塊通過工作流推動(dòng)。工作流引擎提供統(tǒng)一的引擎接口調(diào)用。同時(shí)平臺(tái)提供消息組件,通過建立消息中心,將代辦工作消息發(fā)送給用戶計(jì)算機(jī),同時(shí)也可以通過手機(jī)模塊發(fā)送短信給用戶。這些都是通過組件化技術(shù)實(shí)現(xiàn)的。
軟件的組件技術(shù)又被稱為“軟插件”技術(shù),它通俗被稱為可重用、可組裝技術(shù),是復(fù)用技術(shù)發(fā)展到今天的必然產(chǎn)物[5]。
組件有其自身的規(guī)則實(shí)現(xiàn),而規(guī)則的實(shí)現(xiàn)又提到接口的實(shí)現(xiàn),但是組件對(duì)象本身也是一個(gè)組件,它也有業(yè)務(wù)邏輯規(guī)則需要處理,它也要起到所集合組件的協(xié)調(diào)。因此可以通過某一個(gè)組件對(duì)象協(xié)調(diào)實(shí)現(xiàn)一些、一部分的業(yè)務(wù)邏輯規(guī)則。使用組件技術(shù)的目的是實(shí)現(xiàn)各種規(guī)則的實(shí)現(xiàn),而且組件對(duì)象還將從更廣闊的方面來考慮,它能將一個(gè)大型的分布式系統(tǒng)進(jìn)行統(tǒng)一規(guī)劃、合理處理冗余、安全、平衡負(fù)載等單純編程手段不能實(shí)現(xiàn)的功能。組件對(duì)象可以很平滑地實(shí)現(xiàn)自身的升級(jí)與擴(kuò)展。
生產(chǎn)系統(tǒng)就應(yīng)用了組件技術(shù),其中包括:消息機(jī)制、日志管理、權(quán)限控制、工作流、圖形分析、通用報(bào)表、標(biāo)準(zhǔn)接口等組件。這里重點(diǎn)介紹消息組件。由于采用組件技術(shù),消息機(jī)制組件的內(nèi)部規(guī)則和邏輯都是獨(dú)立實(shí)現(xiàn),程序代碼進(jìn)行封裝。組件提供了標(biāo)準(zhǔn)的COM接口和Web Services接口[6]。使得不同的應(yīng)用系統(tǒng)都可以通過標(biāo)準(zhǔn)的接口對(duì)組件進(jìn)行集成,為其他系統(tǒng)開發(fā)提供了豐富的組件支持。
消息組件的服務(wù)由消息客戶端和消息服務(wù)器組成。消息服務(wù)器負(fù)責(zé)提供業(yè)務(wù)消息接口接收各個(gè)業(yè)務(wù)的消息,同時(shí)對(duì)消息進(jìn)行發(fā)送排隊(duì)消息發(fā)送和確認(rèn)。消息客戶端用來接收、發(fā)送消息。消息客戶端可以給一個(gè)或多個(gè)用戶發(fā)送消息,系統(tǒng)自動(dòng)識(shí)別用戶在何處登錄生產(chǎn)管理系統(tǒng),從而消息可以跟蹤發(fā)送。消息客戶端會(huì)自動(dòng)監(jiān)測(cè)程序的版本變化,當(dāng)發(fā)現(xiàn)新程序時(shí),會(huì)出現(xiàn)提示并自動(dòng)更新。消息客戶端可以一人或多人使用,用戶可以上線、下線。
服務(wù)器端服務(wù)采用定時(shí)器功能從及時(shí)消息表取出要發(fā)送的消息,發(fā)送給客戶端,定時(shí)器刷新時(shí)間10 s。服務(wù)器端服務(wù)采用定時(shí)器功能從定時(shí)消息表中取出定時(shí)消息,分析定時(shí)發(fā)送次數(shù),將定時(shí)發(fā)送的消息放入及時(shí)消息表進(jìn)行排隊(duì),等待發(fā)送。
服務(wù)器端和客戶端采用Socket的Udp協(xié)議來進(jìn)行數(shù)據(jù)傳輸,發(fā)送端口9000接收端口9001,數(shù)據(jù)傳輸?shù)淖址捎胾tf-8字符集。
客戶端用戶登陸進(jìn)行驗(yàn)證后采用托盤技術(shù),托盤的功能右鍵設(shè)置為消息客戶端功能,實(shí)現(xiàn)客戶端的發(fā)送消息,查詢消息等功能,采用調(diào)用Windows IE核心功能建立瀏覽框調(diào)用生產(chǎn)系統(tǒng)中功能頁面來實(shí)現(xiàn)。
服務(wù)器端給客戶端發(fā)送消息的時(shí)候帶上版本功能,如果發(fā)現(xiàn)新版本,采用ftp技術(shù)將最新版本的程序文件下載下來進(jìn)行更新。
用戶登陸生產(chǎn)系統(tǒng)后,如果用戶有消息,系統(tǒng)將消息取出,采用js腳本技術(shù)將消息滾動(dòng)起來,然后將消息頁面放到系統(tǒng)框架中顯示出來。主頁要有一個(gè)第三方頁面定時(shí)進(jìn)行頁面刷新,判斷是否有新消息產(chǎn)生。如果有新消息打開框架顯示,如果沒有則關(guān)閉框架。
客戶端機(jī)器IP的獲得有2種方式:1)用戶登陸生產(chǎn)系統(tǒng)時(shí),系統(tǒng)會(huì)記錄用戶登陸的IP地址;2)用戶登陸消息客戶端時(shí),系統(tǒng)會(huì)記錄用戶登陸的IP地址。服務(wù)器端根據(jù)用戶最后一次登陸系統(tǒng)的IP地址將消息發(fā)送給客戶端機(jī)器。
消息組件需要在客戶端安裝,而用戶的計(jì)算機(jī)能力參差不齊。采用ActiveX技術(shù),可以通過加載網(wǎng)頁控件來控制安裝,打開網(wǎng)頁后,控件能夠控制消息客戶端自動(dòng)安裝。
ActiveX是基于標(biāo)準(zhǔn)COM接口來實(shí)現(xiàn)對(duì)象連接與嵌入的ActiveX控件。它是從VBX發(fā)展而來的,面向微軟的In-ternet Explorer技術(shù)而設(shè)計(jì)的以O(shè)CX為擴(kuò)展名的OLE控件。通過定義容器和組件之間的接口規(guī)范,如果編寫了一個(gè)遵循規(guī)范的控件,那么可以很方便地在多種容器中使用而不用修改控件的代碼。同樣,通過實(shí)現(xiàn)標(biāo)準(zhǔn)接口調(diào)用,一個(gè)遵循規(guī)范的容器可以很容易地嵌入任何遵循規(guī)范的控件。
一般瀏覽器都不同程度上支持ActiveX控件。這允許網(wǎng)頁通過腳本和控件交互產(chǎn)生更加豐富的效果,同時(shí)也帶來一些安全性的問題。Internet Explorer和一些其他應(yīng)用程序同時(shí)支持ActiveX Documents接口規(guī)范,允許在一個(gè)應(yīng)用程序中嵌入另一個(gè)支持這個(gè)規(guī)范的應(yīng)用程序。很多應(yīng)用軟件,例如微軟的Microsoft Office系列和Adobe的Acrobat Reader都實(shí)現(xiàn)了這個(gè)規(guī)范。
根據(jù)電力廣域網(wǎng)的特點(diǎn),構(gòu)建了一個(gè)分布式的電網(wǎng)安全生產(chǎn)系統(tǒng)。從三層架構(gòu)及應(yīng)用,分布式系統(tǒng)設(shè)計(jì)與系統(tǒng)接口實(shí)現(xiàn)、平臺(tái)部分總體設(shè)計(jì),消息組件設(shè)計(jì)與實(shí)現(xiàn)等部分論述該聲場(chǎng)管理系統(tǒng)設(shè)計(jì)。經(jīng)實(shí)際應(yīng)用,該系統(tǒng)設(shè)計(jì)能夠提高電網(wǎng)安全、生產(chǎn)水平、電網(wǎng)運(yùn)行效率以及電網(wǎng)管理水平。
[1]ROBINSON S ,HARREY B.C# 高級(jí)編程 [M].2 版.楊浩,譯.北京:清華大學(xué)出版社 ,2002.
[2]拉曼.UML和模式應(yīng)用[M].北京:機(jī)械工業(yè)出版社,2005.
[3]PRIESTLY M.面向?qū)ο笤O(shè)計(jì)的UML實(shí)踐[M].北京:清華大學(xué)出版社,2000.
[4]劉超,張莉,周伯生.可視化面向?qū)ο蠼<夹g(shù):標(biāo)準(zhǔn)建模語言UML[M].北京:北京航空航天大學(xué)出版,1999.
[5]蔣培,王笑梅.ASP.NET Web 程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2007.
[6]DUTHIE G A.Microsoft ASP.NET 程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2002.