ASP 開發(fā)準(zhǔn)則
發(fā)表時(shí)間:2024-06-18 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]應(yīng)用程序服務(wù)器被,或最終將被 Web 服務(wù)器所使用,它通常是運(yùn)行 ASP 頁面的 IIS 計(jì)算機(jī)。ASP 是您的對(duì)象的唯一客戶機(jī)。它帶來了專門的線程和安全考慮。雖然許多使用 ASP 的 Web 站點(diǎn)根本就不用組件,但在這篇文章中假定 ASP 是 Internet 客戶機(jī)和組件之間的橋梁。下面的 A...
應(yīng)用程序服務(wù)器被,或最終將被 Web 服務(wù)器所使用,它通常是運(yùn)行 ASP 頁面的 IIS 計(jì)算機(jī)。ASP 是您的對(duì)象的唯一客戶機(jī)。它帶來了專門的線程和安全考慮。
雖然許多使用 ASP 的 Web 站點(diǎn)根本就不用組件,但在這篇文章中假定 ASP 是 Internet 客戶機(jī)和組件之間的橋梁。下面的 ASP 組件準(zhǔn)則(英文)提供
ASP 和組件之間的劃分服務(wù)
ASP 最常用于在服務(wù)器上創(chuàng)建供客戶機(jī)使用的 HTML 或 XML 文件,因此我們主要討論這種使用方案。這就引出了一個(gè)常見的問題,如果 ASP 頁面在服務(wù)器上,那么它們是否屬于業(yè)務(wù)層的一部分呢?在組件世界中,答案通常是否。雖然 ASP 確實(shí)在服務(wù)器上運(yùn)行,而且可能與應(yīng)用程序服務(wù)器在同一個(gè)空間,但是這不能使它成為業(yè)務(wù)邏輯的一部分。
隨著用戶界面工具的發(fā)展或者隨著啟用更多的業(yè)務(wù)對(duì)業(yè)務(wù)方案,擁有這種明確的區(qū)別將獲得巨大的回報(bào)。
話說到此,讓我們來看一些最重要的業(yè)務(wù)層和表示層劃分準(zhǔn)則:
令 UI 代碼與業(yè)務(wù)邏輯分離。這包括編寫與 UI 耦合的代碼,例如使用 ASP 內(nèi)部組件的 MTS 對(duì)象,讓它與業(yè)務(wù)邏輯代碼分離,如同在不同的 DLL 中。
將事務(wù)與 ASP 頁面分離。事務(wù) ASP 在某些情況下非常好,但是組件和多層應(yīng)用程序會(huì)改變這種情況。組件不應(yīng)該依賴由客戶機(jī)層來管理它們的事務(wù)和業(yè)務(wù)邏輯語義。
將表示組件(使用請(qǐng)求和響應(yīng)的組件)與 Web 服務(wù)器放在相同的機(jī)器和/或進(jìn)程中。如果將使用 ASP 內(nèi)部組件對(duì)象的對(duì)象放在遠(yuǎn)程機(jī)器上,那么對(duì)內(nèi)部組件的所有調(diào)用將以回調(diào)形式發(fā)生。調(diào)用 IIS 客戶機(jī)的是 COM+ 服務(wù)器,它顯著降低了性能并使安全配置復(fù)雜化。可以將這些調(diào)整對(duì)象放在標(biāo)記為“庫激活”的 COM+ 應(yīng)用程序中。
ASP 存在于服務(wù)器上,因此 ASP 頁面必須符合資源共享規(guī)則,并且記住可伸縮性。請(qǐng)看下面的詳細(xì)內(nèi)容:
在“會(huì)話”中,管理應(yīng)盡量避免用戶特定的狀態(tài)。
保持 ASP 無狀態(tài),并在可能的情況下允許資源池。
操作方式
在評(píng)價(jià)某個(gè)代碼段是否屬于業(yè)務(wù)邏輯或者表示層時(shí),請(qǐng)問一下自己,“如果我必須用按鍵式電話應(yīng)用程序代替我的 ASP 頁面,那么該代碼是否還有用?”如果答案為“是”,那么可以嘗試將它劃分為業(yè)務(wù)邏輯代碼或者用戶界面幫助器代碼。
如果改變了客戶機(jī)后該代碼不能用,或者如果它是構(gòu)造用戶界面的幫助器,則該代碼屬于表示服務(wù)層。它在 ASP 頁面中,或在使用 ASP 內(nèi)部組件的組件中。它不屬于業(yè)務(wù)對(duì)象組件。
理解桌面與 ASP 客戶機(jī)的區(qū)別
ASP 是組件的特殊客戶機(jī),不同于桌面上的傳統(tǒng)單線程 Win32 應(yīng)用程序。主要區(qū)別概括如下。
線程管理:ASP 是多線程客戶機(jī)。這意味著可以有許多并發(fā)活動(dòng)一起運(yùn)行,也許在同一時(shí)刻處理不同的 ASP 頁面。這說明不能使對(duì)象偽稱它是唯一的使用者來獨(dú)占系統(tǒng)。這樣做可能有意外的反應(yīng),例如,養(yǎng)成一個(gè)壞習(xí)慣:將對(duì)象存儲(chǔ)在 ASP 會(huì)話或者應(yīng)用程序變量中。
安全環(huán)境:ASP 是由 Web 站點(diǎn)中的 Internet Information Services 5.0 執(zhí)行的,有低、中、高三種隔離度。甚至這些 Web 站點(diǎn)可以有不同的安全設(shè)置、允許或拒絕匿名訪問、驗(yàn)證客戶等等。所有這些設(shè)置產(chǎn)生了大量的方案,即不同的用戶帳戶最終用的是您的對(duì)象。
輕松增長(zhǎng):這不是技術(shù)問題,而是 Web 應(yīng)用程序所提供設(shè)施的副效應(yīng)。傳統(tǒng)上,為桌面應(yīng)用程序增加用戶基,要求仔細(xì)計(jì)劃好向已知數(shù)量客戶機(jī)的轉(zhuǎn)出。ASP 已經(jīng)改變了該過程。在啟動(dòng)和運(yùn)行后,ASP-Visual Basic 應(yīng)用程序可以方便地打開,供當(dāng)?shù)氐幕蚴澜绶秶乃新殕T、所有業(yè)務(wù)伙伴和所有客戶使用。可以用這種方式描述 — 擁有超鏈接的單個(gè)電子郵件可以使用戶基成十倍地增長(zhǎng)。您的應(yīng)用程序?yàn)榇俗骱脺?zhǔn)備了嗎?唯一了解的方式是對(duì) Web 站點(diǎn)進(jìn)行強(qiáng)度測(cè)試,以獲得實(shí)際性能的預(yù)期值。關(guān)于強(qiáng)度測(cè)試的詳細(xì)信息,請(qǐng)參閱“應(yīng)用程序生命周期”一節(jié)。
在 ASP 內(nèi)應(yīng)該如何使用 Visual Basic 對(duì)象?在頁面范圍內(nèi)創(chuàng)建和取消您的對(duì)象。也就是說,盡可能使 ASP 頁面無狀態(tài),只在暫時(shí)狀態(tài)下依賴會(huì)話或應(yīng)用程序變量。不要將對(duì)象存儲(chǔ)在會(huì)話或應(yīng)用程序變量中。這將 ASP 線程鎖定到您的會(huì)話、取消所有可伸縮性的預(yù)期值。也就是說,Web 服務(wù)器處理的用戶數(shù)不會(huì)超過幾十個(gè)。如果需要在會(huì)話或應(yīng)用程序中存儲(chǔ)內(nèi)容,請(qǐng)使之成為數(shù)據(jù)而不是對(duì)象。
還有可以遵守的許多其他準(zhǔn)則。我們建議您閱讀 MSDN Voices 上 J. D. Meier 撰寫的專欄“Servin' it Up”。該專欄包括了大量的技術(shù)、實(shí)踐和技巧,有助于開發(fā)可擴(kuò)展的、可靠的 ASP 和組件應(yīng)用程序。
參考
MSDN Voices: Servin' it Up Column(英文)
SeminarOnline:在 ASP 下使用自定義 COM 組件(英文)
MSDN 雜志(英文)
不要將引用存儲(chǔ)在會(huì)話或應(yīng)用程序中的 VB 對(duì)象中
所有 Visual Basic 6.0 組件都是“單元線程”的,就是說它們都運(yùn)行在 STA 單元中。這意味著如果在線程中創(chuàng)建對(duì)象,那么對(duì)該對(duì)象的所有調(diào)用都必須用同一線程服務(wù)。許多線程(來自并發(fā) Web 站點(diǎn)用戶)使用 STA 對(duì)象的同一實(shí)例,會(huì)引起一連串的活動(dòng),有可能成為應(yīng)用程序中的瓶頸。
此外,在會(huì)話范圍內(nèi)存儲(chǔ)用 Server.CreateObject 創(chuàng)建的 STA 對(duì)象,可以有效地將執(zhí)行線程聯(lián)系到當(dāng)前用戶,從而將應(yīng)用程序的最大并發(fā)用戶數(shù)限制到默認(rèn)的 20xN(N = 處理器數(shù)量)。
操作方式
如果您按照我們的建議使對(duì)象無狀態(tài),則不需要存儲(chǔ)引用以供客戶機(jī)復(fù)用,并在應(yīng)用程序范圍內(nèi)存儲(chǔ)它們。客戶機(jī)將能夠獨(dú)立創(chuàng)建、使用和取消它們自己的對(duì)象。這就減少了保持會(huì)話特有對(duì)象的需要,原因是它們不保留會(huì)話特有的狀態(tài)。
推薦的方式是使對(duì)象無狀態(tài),它在需要時(shí)訪問數(shù)據(jù)庫或其他存儲(chǔ)區(qū)(例如 cookies 和 LDAP)。
如果需要使用會(huì)話或應(yīng)用程序范圍的數(shù)據(jù),請(qǐng)將數(shù)據(jù),而不是處理數(shù)據(jù)的對(duì)象,存儲(chǔ)在此。您可以創(chuàng)建一個(gè)類,來封裝對(duì)所需值的處理。
參考
信息:不要在會(huì)話或應(yīng)用程序中存儲(chǔ) STA 對(duì)象 (Q243543)(英文)
PRB:將 STA COM 組件存儲(chǔ)在會(huì)話中,會(huì)將會(huì)話鎖定在單線程中 (Q243815)(英文)
信息:ASP 下的組件線程模型概要 (Q243544)(英文)
學(xué)習(xí) IIS 5.0 中的新內(nèi)容
Internet Information Server 5.0 增加了許多新功能。這些改進(jìn)均已寫入 J.D. Meier 的 MSDN 文章中:沿用 IIS 5.0 中的 ASP(英文)。下面是該文中最重要改進(jìn)的概述。
改進(jìn)的、出色的性能
Server.Transfer 和 Server.Execute 方法
集中式錯(cuò)誤處理
改進(jìn)的瀏覽器功能
改進(jìn)的腳本引擎
正則表達(dá)式分析器
與 ADO 記錄集 XML 功能的集成
新的安全性、緩沖、隔離和管理功能
參考
ASP 中的重要更改(英文)
信息:ASP 和 IIS 5.0 中的新功能 (Q222487)(英文)