極光下載站 - 打造齊全的綠色軟件家園

極光下載站

當前位置: 首頁 技術開發 ASP專區 構建穩定的服務器端組件的七個步驟

構建穩定的服務器端組件的七個步驟

時間:2004/6/17 13:52:00 作者:佚名 人氣:36

實現健壯性能的規則

Hank Marquis
來自于Enterprise Solutions for Microsoft BackOffice and Windows NT Magazine
原稿地址:http://www.microsoft.com/china/technet/intranet/sevstep.asp

在你的服務器上安裝了微軟IIS(Internet Information Server),你就可以發揮ASP(Active Server Pages)的優勢了,ASP利用ActiveX組件來為你的網絡應用完成所有種類的工作。盡管你可以在HTML和有ASP頁面的IIS里面使用許多ActiveX組件,服務器端組件也不是運行在一臺服務器上的普通組件。它在運行時不會告訴你同需要特別關照的產品服務器有關的任何信息。你將無法做任何事情去改變其對服務器性能、安全和穩定性的影響。對服務器端的組件的不恰當選擇可能會導致一些問題,包括速度的明顯下降,安全漏洞或者其它更惡劣的問題。

客戶端的組件在用戶計算機上執行。客戶端組件包括絕大多數我們現在已經了解的一些流行組件:標簽控件,文本框,命令按鈕,格子等。這些組件可以通過<OBJECT>標簽和(或)HTML對象語法來包含在客戶端HTML代碼中。

多數的有用的客戶端組件會提供特定種類的用戶界面。記住,使用客戶端組件就意味著真實組件已經被傳到客戶計算機上。尋常的做法就是把組件下載到客戶計算機上。當然,用戶不得不等待下載過程,而且客戶計算機必須被配置為允許下載。

與此形成對比的是,服務器端的組件在服務器計算機上執行。服務器端組件也為用戶做一些工作,但卻是在服務器上運行的。你必須認識到這個差異并且相應地編制代碼。服務器端組件為你的整個應用程序封裝了一些邏輯或功能。

當一個用戶使用應用程序時,他將不會真正看到服務器端的組件。這些組件大多數都可以通過需要使用組件的ASP腳本中的<OBJECT>標識來被包含。你同樣可以通過服務器的CreateObject語法來包含服務器端的組件。

建造健壯的組件

用于創建健壯組件的好材料并不多。但是,我在這里向大家推薦七個關鍵步驟,它可以幫助你創建穩定和安全的服務器端組件,可以很優雅地縮放并且維持性能。在創建一個服務器端網絡應用時,你需要把穩定,安全和性能放在你心目中的首要位置。

服務器端組件不應該具有GUI(圖形用戶界面)。因為服務器端組件是在服務器上運行,網絡應用的用戶是看不到可能彈出的任何對話的。你的組件需要能夠同腳本和其它組件進行交流,卻無需同用戶交流。避免所有的消息框和其它任何圖形的用戶界面單元。你必須開發利用返回結果來同狀態和其它模塊信息進行交流的代碼。如果什么東西出問題,不要拋出一個錯誤消息或者使用一個消息框,可以返回一個狀態變量。你需要做的最后一件事是鎖定忙碌服務器等待OK按鈕被按下。


服務器端組件不得被傳遞引用或者傳遞引用給對象。普遍的做法是把控制作為一個參數傳遞給其它過程或組件。這包括其它對象的引用,比如RecordSets。盡管如此,向網絡中的組件傳遞引用可能導致速度明顯下降,使一個繁忙的服務器更加緩慢,網絡應用程序在響應用戶需求時也表現得更慢。


服務器端組件應該盡可能地少含方法和屬性。每一個方法或屬性的調用都需要大量處理。因此,一個編寫的好的服務器端組件應該幾乎不含明顯的方法和屬性。組件含有的那些方法和屬性會帶來更多的參數。具有很多參數的調用越少,性能就越好,尤其是你的網絡應用程序需要支持許多用戶時。這個技巧和許多開發人員的經驗是相反的。盡量少的使用帶有許多參數的調用也會帶來另外一些問題,這使得編碼和調試更加困難,但是速度上的改進是與付出的努力相當的。


服務器端組件必須實現恰當的線程模型。利用單線程組件可能導致服務器限制一個線程的會話,這將帶來速度的明顯下降。應該選擇VB的房間模型線程選項并且努力避免單線程組件。但是,VB不能創建你可以在Visual C++里發現的具有線程選擇范圍的組件,。這一點也表明VB不是一種很合適這項工作的開發語言。


服務器端組件應該使用早期綁定。如果你的服務器應用程序要擴容,這顯得特別重要。早期綁定的對象在編譯時就擁有引用解析,可以節省不少執行時間。


服務器端組件不能使用在應用程序或會話作用域的聲明中。請注意你的控件是如何被限定作用域的。作用域描述了如何創建一個組件的實例,這對你的服務端組件的成功起著關鍵作用。正如上月所討論的那樣,存在三種級別的作用域:頁面級,會話級和應用程序級。頁面級作用域對象可以用頁面本身的HTML和ASP腳本代碼來創建。頁面級作用域組件的最佳性能可以通過使用房間線程來得到。而對應用程序級和會話級作用域組件來說,可以通過使用ATL組件的雙線程模型來得到。同作用域結合的線程模型也影響服務器的安全性能。例如,一個利用應用程序級作用域的房間線程組件在系統安全環境里運行,但并不是當前用戶的安全環境。這對那些具有安全意識的人來說可能是一個問題。


為了速度,服務器端組件應該是進程中組件;為了穩定,則應該是進程外組件。有兩種方式去創建COM(OLE)服務器--進程中和進程外。在VB里,你用EXE或DLL擴展名去編譯服務器。具有DLL擴展名的OLE服務器就被稱為進程中服務器;而具有EXE擴展名的被叫做進程外服務器。進程外意味著組件作為一個獨立的過程在運行,而且與調用它的應用程序不共享地址空間。運行進程外組件會導致性能的降低,因為Windows不得不在兩個或多個應用程序之間來回移動數據。進程中意味著組件在調用它的應用程序的地址空間里運行。在過程之間交流無需中間物,這使性能顯著提高。進程中組件的負面是如果組件失敗,那調用它的應用程序也會失敗。
服務器端組件使得創建一流的解決方案成為可能。利用IIS,可能還得用上MTS,你可以基于Windows NT的強有力的處理能力創建高性能的可升級的網絡應用程序。


Hank Marquis是現代軟件(Modern Software)的創始人,可以通過[email protected]來聯系他。本文首次發表于BackOffice CTO雜志。

我們微軟公司希望這篇文章的信息對你有用。但是,使用這些信息是你自己愿意承擔的風險。這里所有的信息都以"好像是"的方式提供,對信息的準確性、完整性、針對某種特定目的的適用性、無害性沒有任何明顯的或者暗示的擔保,文章中提到的所有第三方產品或信息都不是被微軟公司授權,推薦,支持和提供保證的。微軟公司你使用這些信息而可能蒙受的無論是直接、間接、特殊的、偶然的或者有因果關系的損失不負任何責任,即使這種損失的可能性被仔細考慮過。文中提到的所有產品的價格都可以在不另做通知的情況下改變。


標簽
分享到:

公眾號

彩票彩经网走势图大全