ActiveX技術(shù)在B/S模式監(jiān)控系統(tǒng)中的應(yīng)用
——
但是由于各個系統(tǒng)具體需要的不同,要建立符合工程實際情況,滿足用戶要求的系統(tǒng),這就需要根據(jù)工程的具體情況,采用具體的技術(shù)手段來組建具有自己特色的系統(tǒng)。本文以基于B/S模式的監(jiān)控管理系統(tǒng)為例,對ActiveX技術(shù)進(jìn)行了詳細(xì)研究。采用ActiveX技術(shù)和B/S模式結(jié)合的方式,實現(xiàn)了某大型工程高效實時的監(jiān)控需求。
1 分析
1.1 B/S模式監(jiān)控系統(tǒng)的系統(tǒng)架構(gòu)與功能
在B/S體系結(jié)構(gòu)中,用戶通過瀏覽器向分布在網(wǎng)絡(luò)上的Web服務(wù)器發(fā)出請求,Web服務(wù)器接受客戶請求,首先需執(zhí)行相應(yīng)的擴(kuò)展應(yīng)用程序執(zhí)行對應(yīng)的操作,然后將相應(yīng)的信息返回給瀏覽器。
基于B/S模式的管理信息系統(tǒng)從結(jié)構(gòu)上主要分為三個層次,如圖1所示:圖1B/S(Browser/Server)模式系統(tǒng)架構(gòu)圖分別為Internet瀏覽器、Web服務(wù)器和數(shù)據(jù)庫服務(wù)器。用戶通過客戶端的Internet瀏覽器以表單或者其他形式向Web服務(wù)器發(fā)送HTTP請求,Web服務(wù)器請求數(shù)據(jù)庫服務(wù)器,并將獲得的結(jié)果以HTML頁面的形式返回給客戶端的Internet瀏覽器,供用戶查看。如圖1所示。
B/S模式具有很多優(yōu)勢:平臺無關(guān)性;使用簡單,易于擴(kuò)展;減少數(shù)據(jù)庫并發(fā)用戶;代碼可重用性好,易于維護(hù)。因此B/S模式逐漸成為一種流行的應(yīng)用系統(tǒng)開發(fā)平臺。然而B/S也并非完美,隨著應(yīng)用的逐步普及,B/S模式逐漸暴露了它的缺陷,如執(zhí)行效率低,Web服務(wù)器負(fù)擔(dān)過重、安全性有待加強(qiáng)等。特別對于一些實時性要求比較高、數(shù)據(jù)量比較大的應(yīng)用系統(tǒng),比如實時監(jiān)控遠(yuǎn)程控制等,B/S模式無法滿足系統(tǒng)的需求。
1.2 ActiveX組件技術(shù)
ActiveX是Microsoft提出的采用COM(ComponentObject Model)和DCOM(Distributed Component ObjectModel)使軟件組件在網(wǎng)絡(luò)環(huán)境中進(jìn)行交互的一組技術(shù)集,它是在COM之上建立的一種理論和概念,與具體的編程語言無關(guān),包括ActiveX Dll組件和ActiveX控件。
ActiveX控件同其他的ActiveX組件相比具有以下特點:能通過設(shè)置屬性控制其行為,從而實現(xiàn)用戶接口;在客戶端的瀏覽器執(zhí)行,能夠緩解服務(wù)器的負(fù)荷;在有需要時,還可以由應(yīng)用程序調(diào)用ActiveX摔件,擴(kuò)展應(yīng)用程序的功能。作為針對Web應(yīng)用開發(fā)的技術(shù),ActiveX控件被廣泛應(yīng)用于Web服務(wù)器以及客戶端應(yīng)用的各個方面。
ActiveX控件常用的形式是.exe、.dll或.ocx的形式。通常以動態(tài)鏈接庫形式存在,因此必須在容器中運行。ActiveX控件能夠直接嵌入到瀏覽器和其他應(yīng)用程序中,并具有和應(yīng)用程序一樣強(qiáng)大的數(shù)據(jù)處理,磁盤操作等能力。
ActiveX控件在以瀏覽器為主的結(jié)構(gòu)中的作用如圖2所示。
ActiveX控件由三大要素組成:屬性、方法和事件。屬性是控件的基本特性,是控制的一部分,在控制裝入時或控制正在進(jìn)行時可以改變;方法是控件提供給外界的一個接口,類似與一個函數(shù)調(diào)用接口,用戶可通過方法來設(shè)置控件的某些性質(zhì)、執(zhí)行某項動作或者進(jìn)行某些運算以實現(xiàn)一定的功能;事件是控件對外部操作或控件內(nèi)部處于某種狀態(tài)時所發(fā)出的通知,它由控件本身所觸發(fā),并與容器進(jìn)行通信。從外界看,ActiveX控件就像一個黑盒,用戶只能看到它的三大要素,如圖3所示。
要使用ActiveX控件,首先要創(chuàng)建控件實例對象,對控件進(jìn)行實例化后,對控件屬性的設(shè)置和操作就可以通過實例對象的屬性和方法來實現(xiàn)。ActiveX控件能在ASP.NET頁面中通過<object>標(biāo)簽創(chuàng)建,<object>標(biāo)簽包含類id(clsid),用于識別需要實例化的ActiveX控件。如下面的代碼所示:
<object>元素的屬性有id,classid,codebase,height,width等。
其中id的屬性值objectJK是用于唯一表示AetiveX控件的名稱,classid屬性值“clsid:49F8CFDF-6B01-4115-BAF4-D579DB51931B”是AetiveX控件在系統(tǒng)中唯一標(biāo)識號,codebase屬性值“../ikocx.cab”是AetiveX控件的安裝文件所在的目錄,此處指位于服務(wù)器根目錄下。
控件技術(shù)的具體實現(xiàn)如下:當(dāng)瀏覽器發(fā)出請求時,Web服務(wù)器向用戶瀏覽器回傳內(nèi)嵌ActiveX控件的頁面,由瀏覽器負(fù)責(zé)解釋。在解釋過程中首先用該控件的在頁面中注明的id值先在本地的注冊表內(nèi)進(jìn)行查詢,若已經(jīng)存在,則說明該控件已經(jīng)在本地安裝,然后通過灃冊表中的相關(guān)信息直接使用該控件;否則就要根據(jù)頁面中所提示的該控件所在的服務(wù)器上的路徑到服務(wù)器上去下載并且自動完成在本地的安裝注冊,使該控件成為本地資源,供以后使用。當(dāng)Web服務(wù)器提供更高版本的ActiveX控件時,瀏覽器會自動下載新的摔件,并自動安裝,覆蓋原來的控件。
2 應(yīng)用實例
2.1 系統(tǒng)結(jié)構(gòu)設(shè)計
作者參加了某大型系統(tǒng)工程的監(jiān)控分系統(tǒng)的研究與開發(fā),在系統(tǒng)結(jié)構(gòu)的設(shè)計中,需要充分考慮系統(tǒng)特點、用戶需求和人機(jī)交互。諸如系統(tǒng)要完成對高速硬件設(shè)備的數(shù)據(jù)進(jìn)行采集分析,將數(shù)據(jù)處理匯報給用戶;要實現(xiàn)在線監(jiān)控,預(yù)警,數(shù)據(jù)庫查詢分析等功能,對上作服務(wù)器或臺式機(jī)要能遠(yuǎn)程抓屏;住系統(tǒng)出現(xiàn)問題之后能夠智能設(shè)置高速硬件設(shè)備和后端處理設(shè)備的各種工作參數(shù),糾正一般性錯誤。而對于系統(tǒng)管理人員米講,希望能夠隨時在任何一臺終端上及時準(zhǔn)確的了解現(xiàn)場的全部狀況。如果系統(tǒng)出現(xiàn)問題,要迅速知曉問題出現(xiàn)的環(huán)節(jié)和解決措施?;谝陨蟽煞矫娴目紤],我們采取了ActiveX組件和B/S模式結(jié)合的系統(tǒng)。如圖4是設(shè)計監(jiān)控系統(tǒng)的結(jié)構(gòu)框圖。
設(shè)計時,對于事務(wù)性強(qiáng),交互少,數(shù)據(jù)傳輸,數(shù)據(jù)處理量小的功能采用B/S模式,它主要是數(shù)據(jù)發(fā)布,數(shù)據(jù)庫查詢和操作。對于實時性高、刷新率快、數(shù)據(jù)處理量大的狀態(tài)顯示功能則采用了ActiveX組件嵌入瀏覽器的技術(shù),ActiveX組件直接與被監(jiān)控的設(shè)備進(jìn)行通信,對數(shù)據(jù)記錄并進(jìn)行處理。對于交互性強(qiáng)、安全性要求高的配置部分則采用應(yīng)用程序和ActiveX組件通信的方式,ActiveX組件從應(yīng)用程序得到數(shù)據(jù)庫中的配置參數(shù)并進(jìn)行數(shù)據(jù)處理,配置被監(jiān)控硬件設(shè)備。在被監(jiān)控設(shè)備的服務(wù)端支持下,ActiveX組件還具有遠(yuǎn)程抓屏的功能。
系統(tǒng)所有的工作參數(shù)都保存在數(shù)據(jù)庫服務(wù)器中,Web服務(wù)器程序和應(yīng)用程序常駐內(nèi)存,ActiveX組件既可以由網(wǎng)頁嵌入調(diào)用,也可以由應(yīng)用程序直接調(diào)用。ActiveX組件由網(wǎng)頁嵌入調(diào)用時,用戶可在任何一臺終端上實現(xiàn)所有的監(jiān)控,由應(yīng)用程序直接調(diào)用時,擴(kuò)展了應(yīng)用程序的功能。
2.2 ActiveX組件的開發(fā)
本文主要設(shè)計并實現(xiàn)了如下幾個ActiveX功能組件。
2.2.1 設(shè)備工作狀態(tài)顯示
開發(fā)ActiveX控件時存程序中保留相應(yīng)的數(shù)據(jù)接口,以便傳送控制量和接收實時數(shù)據(jù)。在本工程中,為了提高被監(jiān)控設(shè)備的工作效率,被監(jiān)控設(shè)備對監(jiān)控查詢只需要返回原始的工作狀態(tài)信息,不需要做任何處理,對數(shù)據(jù)的處理由ActiveX控件在終端上完成。再將用戶需要的結(jié)果數(shù)據(jù)在網(wǎng)頁上通過一定形式顯示出來,如數(shù)字顯示、圖形顯示、曲線顯示、表格顯示等。數(shù)字顯示最簡單,直接把讀到的數(shù)據(jù)顯示出來就行了。圖形顯示則需用ActiveX控件將數(shù)據(jù)模擬為現(xiàn)實中的儀表信號燈等設(shè)備顯示出來。曲線顯示需用ActiveX控件將數(shù)據(jù)按一定的比例在橫坐標(biāo),縱坐標(biāo)上繪制成曲線。表格顯示用于數(shù)據(jù)比較多時,數(shù)據(jù)先在ActiveX控件上進(jìn)行處理,然后再通過ActiveX控件的表格顯示出來。
ActiveX組件相應(yīng)的監(jiān)控方法能根據(jù)系統(tǒng)中結(jié)點的變化調(diào)整顯示界面,根據(jù)系統(tǒng)數(shù)據(jù)流的流向分布進(jìn)行分析,設(shè)計了常見故障的檢測程序,在系統(tǒng)結(jié)點出現(xiàn)故障時,能夠分析出相應(yīng)的故障結(jié)點及原因,并發(fā)出報警信號(聲音及閃爍),并向常駐內(nèi)存的服務(wù)器應(yīng)用程序發(fā)出消息。
2.2.2 配置設(shè)備工作參數(shù)
當(dāng)終端上的監(jiān)控ActiveX控件率先檢測到系統(tǒng)中的問題需要重新配置時,會向服務(wù)器應(yīng)用程序請求數(shù)據(jù)庫操作,如果數(shù)據(jù)庫中正在配置標(biāo)志為1,則不進(jìn)行任何操作,如果標(biāo)志為0,則將標(biāo)志置1,然后進(jìn)行參數(shù)配置,配置完畢,狀態(tài)恢復(fù)正常后將標(biāo)志恢復(fù)為0。如果用戶沒有在任何終端上監(jiān)控系統(tǒng)的工作狀態(tài),常駐服務(wù)器內(nèi)存的應(yīng)用程序會調(diào)用ActiveX控件的監(jiān)控方法,一直監(jiān)控所有被監(jiān)控設(shè)備,當(dāng)系統(tǒng)中的工作結(jié)點發(fā)生變化,或檢測到硬件狀態(tài)異常時,需要調(diào)用ActiveX控件對相應(yīng)硬件設(shè)備進(jìn)行重新配置。
2.2.3 遠(yuǎn)程控制功能
為了能做到在任何一臺終端上對工作服務(wù)器和臺式機(jī)的更有效的臨控,ActiveX組件實現(xiàn)了遠(yuǎn)程控制這一功能。如圖5所示。
用戶在任何一臺終端上,可以對服務(wù)器或者臺式機(jī)進(jìn)行遠(yuǎn)程控制,由于遠(yuǎn)程抓屏實時性高,為了減少被監(jiān)控設(shè)備的負(fù)荷,我們設(shè)計了同一臺硬件設(shè)備最多向一個終端提交遠(yuǎn)程控制的限制,從而避免多個用戶同時操作一臺機(jī)器出現(xiàn)沖突和競爭。
2.3 ActiveX組件的安全性
因為ActiveX組件具有和應(yīng)用程序一樣強(qiáng)大的功能,在Internet上,當(dāng)用戶瀏覽到帶ActiveX組件的網(wǎng)頁時,IE瀏覽器在自動下載和提示用戶安裝之前,必須經(jīng)過用戶的同意及確認(rèn)才可。
我們設(shè)計的ActiveX控件或插什是白行開發(fā)的,其狀態(tài)通常是未標(biāo)記為安全或足未經(jīng)簽名驗證的。由于IE瀏覽器的默認(rèn)安全設(shè)置是禁止下載、運行未簽名的ActiveX控件和插件,因此客戶機(jī)必須在IE瀏覽器的安傘設(shè)置頁面中將“ActiveX控件和插件”下的相關(guān)選項設(shè)置由“禁用”改為“啟用”后,才能正常地進(jìn)行應(yīng)用。
啟用下載、運行未經(jīng)簽名驗證的ActiveX控件和插件后,一些未經(jīng)簽名驗證的插件會趁虛而入,它們會在用戶瀏覽網(wǎng)頁的時候,在用戶毫不知曉的情況下自動下載到本地計算機(jī)并加載到IE瀏覽器中。由于這些ActiveX摔件和插什未經(jīng)簽名驗證,不儀會影響系統(tǒng)的安全性,同時企業(yè)內(nèi)部用戶在使用IE瀏覽器進(jìn)行S應(yīng)用時,應(yīng)用調(diào)用的ActiveX控件和這些已經(jīng)自動加載到IE瀏覽器中未經(jīng)簽名驗證的控件或插件可能發(fā)生訪問沖突,造成應(yīng)用異常中止。
當(dāng)然,在工程內(nèi)部可信賴的網(wǎng)絡(luò)環(huán)境中,這種情況發(fā)生的可能性很小,但是在系統(tǒng)內(nèi)部感染病毒的情況下也有可能發(fā)生。如何有效地管理這些已經(jīng)加載到IE瀏覽器的未簽名ActiveX控件,同時防止系統(tǒng)繼續(xù)自動下載、加載未經(jīng)簽名驗證的ActiveX摔件呢?我們可以采取以下三種方法:
禁用/刪除IE瀏覽器的加載項;分區(qū)域設(shè)置IE的安全選項,只加載來自服務(wù)器站點的ActiveX控件;對Windows Server 2003,我們可以使用管理域中的ActiveX控件的組策略工具。
采用上面這三種方法的任何一種之后,我們可以放心的使用我們自己設(shè)計的ActiveX控件了。但對于最新版本的Windows操作系統(tǒng)用戶,在訪問到帶ActiveX組件的頁面時,IE會彈出一個提示:“單擊以激活并使用此控件”。這是因為Microsoft在2006年2月28日發(fā)布了安全通報MS06-013,討論IE的非安全更新912945。應(yīng)用此更新之后,只有當(dāng)用戶手動激活其用戶界面時,才能與網(wǎng)頁中加載的Microsoft ActiveX進(jìn)行交互。如果用戶不點擊激活,ActiveX組件就無法發(fā)揮作用。
在實際的軟件設(shè)計中,為了方便用戶使用瀏覽器來進(jìn)行監(jiān)控而不需要額外的點擊,我們修改了使用ActiveX組件的方式。在網(wǎng)頁中使用ActiveX組件的傳統(tǒng)方式是:<object classid=”clsid:ActiveX組件ID號”:></object>
因為一個頁面的所有</object>的活動內(nèi)容都不會被自動激活。我們采用外部調(diào)用JavaScript代碼的document.write方法,把JavaScript代碼和調(diào)用ActiveX控件的頁面寫在不同的文件中。這樣雖然麻煩一些,但是不強(qiáng)制用戶通過點擊來激活控件,方便了用戶使用。
木文中將ActiveX技術(shù)應(yīng)用于B/S監(jiān)控軟件中,不僅增強(qiáng)了B/S監(jiān)控軟件的功能,加快了軟件的開發(fā)速度,而且適應(yīng)了當(dāng)前軟件開發(fā)向模塊化、開放化發(fā)展的趨勢,提高了系統(tǒng)的實時性、可靠性和可擴(kuò)展性。
ActiveX技術(shù)應(yīng)用于B/S模式彌補(bǔ)了單B/S模式的不足,比B/S和C/S結(jié)合的方式簡單實用(不需要安裝C/S客戶端),可以用在商業(yè)化的在線殺毒,在線點播,在線考試等諸多領(lǐng)域,具有非常光明的應(yīng)用前景。
評論