前綴 | 使用的變量 | 變量示例 |
---|---|---|
b or bln | Boolean | bSuccess |
c or cur | Currency | cAmount |
d or dbl | Double | dblQuantity |
dt or dat | Date and Time | dtDate |
f or flt | Float | fRatio |
l or lng | Long | lMilliseconds |
i or int | Integer | iCounter牋 |
s or str | String | sName |
a or arr | Array | aUsers() |
o or obj | COM Object | oPipeline |
數(shù)據(jù)庫對(duì)象的變量前綴:
前綴 | 使用的變量 | 變量示例 |
---|---|---|
cnn | Connection | cnnPubs |
rst | Recordset | rstAuthors |
cmd | Command | cmdEmployee |
fld | Field | fldLastName |
范圍及前綴的用法:
前綴 | 說明 |
---|---|
g_ | 創(chuàng)建于 Global.asa。 |
m_ | 對(duì)于 ASP 頁或在 Include 文件中是局部的。 |
(沒有前綴) | 非靜態(tài)變量,對(duì)于過程來說前綴是局部的 |
Knowledge Base (KB) 中的一篇文章“Q110264 INFO: Microsoft Consulting Services Naming Conventions for Visual Basic”(英文)對(duì)命名約定提供了真知灼見。
盡可能采用目錄結(jié)構(gòu)為您的各個(gè)應(yīng)用程序部件提供始終如一的位置。您應(yīng)用程序的實(shí)際目錄結(jié)構(gòu)當(dāng)然由您自己決定,但通常是將圖像、文檔、include 文件和組件分別放置在單獨(dú)的目錄中。以下是簡(jiǎn)單 ASP 應(yīng)用程序目錄結(jié)構(gòu)示例。
目錄結(jié)構(gòu)示例:
\SimpleAspApp \Docs \Images \Includes
一個(gè)好的目錄結(jié)構(gòu)允許您有選擇地應(yīng)用 NTFS 權(quán)限。您還可以從 ASP 應(yīng)用程序內(nèi)部使用相對(duì)路徑。例如,可以使用以下代碼,從位于 SimpleAspApp 目錄的 default.asp 頁,引用 Includes 目錄中的 include 文件 top.asp:
./includes/top.asp
注意我的 include 文件的擴(kuò)展名是 .asp,而不是 .inc。這樣做是出于安全方面的考慮,而且使用 .asp 擴(kuò)展名(而不是 .inc),還能夠在 Visual InterDev(R) 中使用彩色編碼。
有關(guān)結(jié)構(gòu)化 ASP 應(yīng)用程序的其他一些提示和技巧,請(qǐng)參閱文章“ASP Conventions”(英文)。
ASP 將在服務(wù)下運(yùn)行。設(shè)計(jì) ASP 應(yīng)用程序時(shí),您馬上會(huì)面臨在桌面應(yīng)用程序中不會(huì)遇到的安全環(huán)境和線程問題。在桌面環(huán)境中,通常只處理作為交互式用戶運(yùn)行的單線程執(zhí)行,而且有權(quán)訪問當(dāng)前的桌面系統(tǒng)。在“Internet 信息服務(wù) (IIS)”中,模擬不同用戶環(huán)境的多個(gè)客戶機(jī)線程調(diào)用您的應(yīng)用程序,而且您的應(yīng)用程序被限于“系統(tǒng)”桌面。
這對(duì)您來說意味著什么?請(qǐng)學(xué)習(xí) IIS 的安全模式。還要提醒您:僅因?yàn)槟承〇|西能在 Visual Basic IDE 下能夠正常運(yùn)行,并不意味著它就能在 ASP 技術(shù)中安全運(yùn)行。Visual Basic IDE 并沒有準(zhǔn)確地模擬運(yùn)行時(shí)環(huán)境。常見的設(shè)計(jì)錯(cuò)誤包括:在 ASP 技術(shù)中使用需要用戶界面的 .OCX 控件,使用對(duì)線程來說不安全的組件,和使用要求特殊的用戶上下文的組件。要避免的一個(gè)最簡(jiǎn)單的問題,就是從應(yīng)用程序中試圖訪問 HKEY_CURRENT_USER (HKCU) 注冊(cè)表項(xiàng)(例如,不要調(diào)用 Visual Basic 的 GetSetting 和 SaveSetting 函數(shù),它們都依賴于 HKCU)。同樣,不要出現(xiàn)需要用戶進(jìn)行人機(jī)交互的消息框或其他對(duì)話框。
以下文章是有關(guān) ASP 技術(shù)中的安全和驗(yàn)證問題的相當(dāng)不錯(cuò)的入門讀物:
ASP 技術(shù)通過生成 HTML 輸出提供了表示服務(wù)。簡(jiǎn)而言之,它會(huì)生成用戶界面。您需要將商務(wù)邏輯從 ASP 表示腳本中分隔開來。即使您不使用 COM 組件將商務(wù)邏輯從 ASP 代碼中分隔開來,至少也要將商務(wù)邏輯分隔到函數(shù)和 include 文件中,以提高可維護(hù)性、可讀性和可重用性。在需要排除故障和隔離問題時(shí),您還能體會(huì)模塊化設(shè)計(jì)方法的好處。
調(diào)用腳本內(nèi)部調(diào)用函數(shù)和方法,可避免代碼亂作一團(tuán),并能在 ASP 應(yīng)用程序中添加結(jié)構(gòu)。下面舉例說明從 ASP 代碼中,將邏輯分離到方法調(diào)用中:
lt;% Main() MyBizMethod() ... Sub Main() GetData() DisplayData() End Sub %>
在使用包含 ASP 功能的技術(shù)時(shí),可以應(yīng)用這一原則。下面舉一個(gè)使用 Visual Basic WebClass 時(shí)的例子,說明如何使用這一原則:
常見的問題是,從桌面系統(tǒng)到服務(wù)器的過渡。許多具有桌面系統(tǒng)背景的開發(fā)人員從來沒有為服務(wù)器的一些問題和資源共享擔(dān)心過。在傳統(tǒng)的桌面應(yīng)用程序中,連接到服務(wù)器是個(gè)耗時(shí)的過程。為了改善用戶的體驗(yàn),通常采用盡早獲取資源和推遲釋放資源的方法。例如,許多應(yīng)用程序會(huì)在它的整個(gè)運(yùn)行時(shí)間內(nèi)始終連接著數(shù)據(jù)庫。
這種方式在傳統(tǒng)的桌面應(yīng)用程序中能夠正常工作其原因是用戶數(shù)量非常明確,容易加以控制,并且后端與前端緊密連接。然而,對(duì)于當(dāng)前的 Web 應(yīng)用程序,這種方式已經(jīng)不可行了,其原因是有限的服務(wù)器資源將面對(duì)越來越多的用戶。為了使您的應(yīng)用程序能夠應(yīng)付用戶的增加,您需要盡晚獲取資源,盡早釋放資源。
共用有助于增加這一方式的有效性。通過共用,多個(gè)用戶能夠共享資源,而且等待時(shí)間最少,對(duì)服務(wù)器的影響也最小。例如,在處理數(shù)據(jù)庫時(shí),ODBC 連接共用和 OLEDB 資源共用可以實(shí)現(xiàn)從共用池中選擇連接,最大程度地減少連接數(shù)據(jù)庫的開銷。
有關(guān)共用 ADO 的詳細(xì)信息,請(qǐng)參閱“Pooling in Microsoft Data Access Components”(英文)。
盡管 HTTP 協(xié)議是無狀態(tài)的,ASP 開發(fā)人員還是會(huì)經(jīng)常使用 ASP 功能內(nèi)置的狀態(tài)保持機(jī)制。例如,使用 ASP 技術(shù)內(nèi)置的 Application 對(duì)象,開發(fā)人員所保存的資源能夠?yàn)閼?yīng)用程序的所有用戶共享。通過使用 ASP 內(nèi)置的 Session 對(duì)象,開發(fā)人員只為單個(gè)用戶保存資源。
盡管聽起來在 ASP 技術(shù)的 Session 對(duì)象中保存信息是一個(gè)非常方便的保持狀態(tài)的方式,然而這一方式付出的代價(jià)太大,而且它也可能成為對(duì)可伸縮性的最大的限制因素之一。應(yīng)用程序的可伸縮性本質(zhì)上是隨著用戶數(shù)目的增長(zhǎng)能夠繼續(xù)保持其性能的能力。而對(duì)于每一用戶,在會(huì)話超時(shí)或被放棄之前,Session 對(duì)象都會(huì)消耗服務(wù)器的資源。會(huì)話還會(huì)將您捆綁到一臺(tái)服務(wù)器上,從而限制您利用 Web 集群的功能。請(qǐng)盡可能不要使用 ASP Session 對(duì)象進(jìn)行狀態(tài)管理。如果您完全沒有使用會(huì)話,您就可以禁用 Web 應(yīng)用程序的 Session 狀態(tài)(請(qǐng)參閱 IIS 文檔)。否則,您可以使用下述語句,針對(duì)每一頁禁用 Session 狀態(tài):
%@ENABLESESSIONSTATE=False %>
對(duì)于一些簡(jiǎn)單的數(shù)據(jù),您可以使用 QueryString cookie 或隱藏的窗體域保持 ASP 請(qǐng)求間的狀態(tài)。然后,對(duì)于更為復(fù)雜的信息,通常推薦您使用數(shù)據(jù)庫。一般所采用的方式是生成某一特有的標(biāo)識(shí)符,然后發(fā)送到每一個(gè)發(fā)出請(qǐng)求的客戶機(jī),并保存為隱藏的窗體域。在隨后的請(qǐng)求中,這一特有的標(biāo)識(shí)符被用于在數(shù)據(jù)庫中查找與該用戶相關(guān)的狀態(tài)信息。這一方式提供了更高的可伸縮性和更為簡(jiǎn)潔明了的代碼。
有關(guān)使用 QueryString cookie 和隱藏的窗體域的詳細(xì)信息,請(qǐng)參閱“Q175167 HOWTO: Persisting Values Without Sessions”(英文)。
在創(chuàng)建 ASP 技術(shù)的對(duì)象時(shí),您可以選擇 OBJECT> 標(biāo)記、Server.CreateObject 和 CreateObject 三種方式。每項(xiàng)技術(shù)的行為略有不同。盡管在 IIS 4.0 中,使用 OBJECT> 標(biāo)記或 CreateObject 比 Server.CreateObject 略具性能優(yōu)勢(shì),我們一般還是推薦使用 Server.CreateObject, 以便于 ASP 應(yīng)用程序認(rèn)知您的對(duì)象。(注意在 IIS 5.0 中,前兩項(xiàng)與 Server.CreateObject 相比,已經(jīng)沒有性能優(yōu)勢(shì)。)
OBJECT> 標(biāo)記僅在調(diào)用第一個(gè)方法時(shí)才會(huì)創(chuàng)建組件,因此能夠節(jié)省資源。Server.CreateObject 使用 ASP 技術(shù)內(nèi)置的 Server 對(duì)象創(chuàng)建組件。實(shí)質(zhì)上,它只是執(zhí)行了 CoCreateInstance,但是 ASP 卻能夠認(rèn)知這一對(duì)象。同時(shí),還將調(diào)用 ASP 技術(shù)的傳統(tǒng)的 OnStartPage 和 OnEndPage。(注意最好在 IIS 4.0 或者更高版本中使用 ObjectContext)。如果您只是使用 CreateObject,您將越過 ASP 技術(shù)而直接使用 Scripting 引擎。
以下是一個(gè)可能出現(xiàn)的例外情況:當(dāng)您通過防火墻進(jìn)行調(diào)用時(shí),您可能需要調(diào)用 CreateObject 而不是 Server.CreateObject。詳細(xì)信息,請(qǐng)參閱“Q193230 - PRB: Server.CreateObject Fails when Object is Behind Firewall”(英文)。
確保在您所有的 ASP 應(yīng)用程序中都包含了錯(cuò)誤處理過程。而且,確保您提供了有用的診斷信息。我還沒有碰到有哪個(gè)人抱怨錯(cuò)誤信息太具有說明性了。請(qǐng)確保在錯(cuò)誤日志中包含以下信息:
因?yàn)閷⒃?ASP 下運(yùn)行,您可能希望將這些信息寫到文件或 NT 的事件日志。您還可以創(chuàng)建記錄關(guān)鍵的應(yīng)用程序事件的應(yīng)用程序事件日志,以備診斷應(yīng)用程序錯(cuò)誤時(shí)使用。
以下文章提供了有關(guān)錯(cuò)誤處理技術(shù)的詳細(xì)信息:
瀏覽器并不是準(zhǔn)確的測(cè)試方式,它只能向您展示應(yīng)用程序可能的用途。請(qǐng)針對(duì)您的應(yīng)用程序設(shè)置特定的性能目標(biāo),并使用 Web Application Stress Tool 等負(fù)載工具進(jìn)行壓力測(cè)試。您需要自己決定您的環(huán)境所能接受的條件,以下是一些幫助您啟動(dòng)測(cè)試過程的通用指導(dǎo)方針:
將測(cè)試環(huán)境與實(shí)際運(yùn)行的環(huán)境相匹配,甚至防火墻也不例外。這聽起來代價(jià)很高,但我曾經(jīng)聽說過開發(fā)人員因?yàn)闆]有考慮到防火墻,而丟失了工作。
有關(guān)使用 Web Application Stress Tool 測(cè)試 ASP 應(yīng)用程序的詳細(xì)信息,請(qǐng)參閱“I Can't Stress It Enough -- Load Test Your ASP Application”(英文)。
使用隔離功能保護(hù)您的應(yīng)用程序過程能夠極大地增強(qiáng)服務(wù)器的穩(wěn)定性。談到 Internet 應(yīng)用程序,是否使用隔離功能的后果可能會(huì)有巨大的差別:一個(gè)是應(yīng)用程序崩潰,一個(gè)是服務(wù)器當(dāng)機(jī)。保護(hù)主 IIS 進(jìn)程 (InetInfo.exe) 通常會(huì)排在優(yōu)先級(jí)列表的較高位置。在您使用組件時(shí),這一點(diǎn)尤為突出。
通常所采用的保護(hù)主 ISS 進(jìn)程的技術(shù)是使 Web 應(yīng)用程序運(yùn)行在各自的內(nèi)存空間中。在 Internet Services Manager 中,您可以針對(duì)每一個(gè) Web 設(shè)置這一選項(xiàng)。雖然因?qū)M(jìn)程進(jìn)行編組而開銷的系統(tǒng)資源會(huì)對(duì)性能有些微的影響,但對(duì)應(yīng)用程序所起的保護(hù)作用值得付出這一代價(jià)。 在 IIS 4.0 下,您可以采用進(jìn)程內(nèi) (in-process) 和進(jìn)程外(out-of-process,OOP)兩種方式運(yùn)行應(yīng)用程序。OOP 應(yīng)用程序會(huì)運(yùn)行在新的 Mtx.exe 實(shí)例中。在 IIS 5.0 下,您還能使用其他的隔離選項(xiàng)??梢詫⒏綦x級(jí)別設(shè)置為“低”(對(duì) Inetinfo.exe 來說是進(jìn)程內(nèi)應(yīng)用程序)、“中”(DllHost.exe 共享實(shí)例)或“高”(Dllhost.exe的非共享實(shí)例)。
除了將 Web 應(yīng)用程序隔離在它們自己的內(nèi)存空間中之外,您可能還希望隔離不信任的組件。不信任的組件通常是在實(shí)際環(huán)境中沒有通過測(cè)試時(shí)間的考驗(yàn)的組件。您可以在 Server 包中運(yùn)行這些組件,這樣它們會(huì)運(yùn)行在新的 Dllhost.exe 實(shí)例中。
一般而言,如果要在性能和保護(hù)措施之間采取中庸之道,方式如下:在“高”隔離狀態(tài)運(yùn)行 Web 應(yīng)用程序,在庫包中運(yùn)行組件。這種方式最大限度地減少了編組開支,同時(shí)在進(jìn)程之間提供了最強(qiáng)的保護(hù)作用。
詳細(xì)信息,請(qǐng)參閱文章“Server Reliability Through Process Isolation”(英文)。
在 IIS 4.0 下,針對(duì)每個(gè)受 MTS 管理的處理器,ASP 的默認(rèn)共用組是 10 個(gè)線程。在 IIS 5.0 中,默認(rèn)值是 20。這就意味著每一線程都是一份潛在的寶貴資源,能夠處理多個(gè)客戶機(jī)請(qǐng)求。您同樣需要避免調(diào)用會(huì)出現(xiàn)阻塞的方法,如進(jìn)行大的數(shù)據(jù)庫調(diào)用。如果您有要執(zhí)行這種操作的工作,它將阻止 ASP 應(yīng)用程序?qū)㈨憫?yīng)快速返回到客戶機(jī),則請(qǐng)考慮使用隊(duì)列功能。例如,在 NT 4.0 中,可以使用 MSMQ。在 Windows 2000 中,可以使用 Queued Components(排隊(duì)組件)。
在會(huì)話中不要存儲(chǔ) Single-threaded Apartment (STA) 組件,這種方式的一個(gè)共同缺陷是會(huì)填滿會(huì)話范圍中的 Visual Basic 對(duì)象。會(huì)將用戶鎖定到某一線程,與線程共用組的目的背道而馳。潛在的用戶會(huì)被阻塞在其他用戶的后面,等待創(chuàng)建他們組件的線程變得有效。您應(yīng)該采用別的方式,設(shè)計(jì)能基于每一頁進(jìn)行創(chuàng)建和破壞的無狀態(tài)組件。
快速提示:確保已在服務(wù)器上禁用了 ASP Script Debugging 功能(使用 Internet Services Manager)。如果啟用了 ASP Script Debugging,則 ASP 的執(zhí)行過程將被鎖定到某一線程。
詳細(xì)信息,請(qǐng)參閱以下文章:
創(chuàng)建 ASP 應(yīng)用程序需要相當(dāng)寬廣的知識(shí)面。ASP 應(yīng)用程序所面臨的一個(gè)挑戰(zhàn)是目前沒有通用的規(guī)則(這也正是樂趣的一部分)。另外一個(gè)問題是許多開發(fā)人員接觸 Internet 開發(fā)之前是從事桌面系統(tǒng)的開發(fā)工作。通過在您的 ASP 開發(fā)工作中應(yīng)用上述規(guī)則,您有希望避免犯下代價(jià)巨大的錯(cuò)誤,并能開發(fā)出相當(dāng)不錯(cuò)的 ASP 應(yīng)用程序。
標(biāo)簽:公主嶺 重慶 懷化 成都 臺(tái)灣 麗江 內(nèi)江 天津
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《ASP 指南》,本文關(guān)鍵詞 ASP,指南,ASP,指南,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。