- 亮劍.NET:圖解ASP.NET網(wǎng)站開發(fā)實戰(zhàn)
- 繆勇 李新峰 張光桃編著
- 4154字
- 2019-03-01 19:43:57
1.2 ASP.NET的體系結(jié)構(gòu)
ASP.NET Framework是支持生成、運行下一代應(yīng)用程序和XML Web Services的內(nèi)部Windows組件。ASP.NET Framework旨在實現(xiàn)下列目標。
● 提供一個一致的面向?qū)ο蟮木幊汰h(huán)境,無論對象代碼是在本地存儲和執(zhí)行,還是在本地執(zhí)行但在Internet上分布,或者是在遠程執(zhí)行的。
● 提供一個將軟件部署和版本控制沖突最小化的代碼執(zhí)行環(huán)境。
● 提供一個可提高代碼(包括由未知的或不完全受信任的第三方創(chuàng)建的代碼)執(zhí)行安全性的代碼執(zhí)行環(huán)境。
● 提供一個可消除腳本環(huán)境或解釋環(huán)境性能問題的代碼執(zhí)行環(huán)境。
● 使開發(fā)人員的經(jīng)驗在面對類型大不相同的應(yīng)用程序(如基于Windows的應(yīng)用程序和基于Web的應(yīng)用程序)時保持一致。
● 按照工業(yè)標準生成所有通信,以確保基于.NET Framework的代碼可與任何其他代碼集成。
ASP.NET Framework具有2個主要組件:公共語言運行庫和.NET Framework類庫。公共語言運行庫是.NET Framework的基礎(chǔ)。用戶可以將運行庫看做一個在執(zhí)行時管理代碼的代理,它提供內(nèi)存管理、線程管理和遠程處理等核心服務(wù),并且還強制實施嚴格的類型安全及可提高安全性和可靠性的其他形式的代碼準確性。事實上,代碼管理的概念是運行庫的基本原則。以運行庫為目標的代碼稱為托管代碼;而不以運行庫為目標的代碼稱為非托管代碼。.NET Framework的另一個主要組件是類庫,它是一個綜合性的面向?qū)ο蟮目芍赜妙愋图希脩艨梢允褂盟_發(fā)多種應(yīng)用程序,這些應(yīng)用程序包括傳統(tǒng)的命令行或圖形用戶界面(GUI)應(yīng)用程序,也包括基于ASP.NET所提供的最新創(chuàng)新的應(yīng)用程序(如Web窗體和XML Web Services)。
.NET Framework可由非托管組件承載,這些組件將公共語言運行庫加載到它們的進程中并啟動托管代碼的執(zhí)行,從而創(chuàng)建一個可以同時利用托管和非托管功能的軟件環(huán)境。.NET Framework不但提供若干個運行庫宿主,而且還支持第三方運行庫宿主的開發(fā)。
例如,ASP.NET承載運行庫以為托管代碼提供可伸縮的服務(wù)器端環(huán)境。ASP.NET直接使用運行庫以啟用ASP.NET應(yīng)用程序和XML Web Services(本主題稍后將對這兩者進行討論)。
Internet Explorer是承載運行庫(以MIME類型擴展的形式)的非托管應(yīng)用程序的一個示例。使用Internet Explorer承載運行庫使用戶能夠在HTML文檔中嵌入托管組件或Windows窗體控件。以這種方式承載運行庫使得托管移動代碼(類似于Microsoft、ActiveX控件)成為可能,不過它需要進行重大改進(如不完全受信任的執(zhí)行和獨立的文件存儲),而這種改進只有托管代碼才能提供。
圖1-1顯示公共語言運行庫和類庫與應(yīng)用程序之間,以及與整個系統(tǒng)之間的關(guān)系。該圖還顯示了托管代碼如何在更大的結(jié)構(gòu)內(nèi)運行。

圖1-1 NET Framework環(huán)境
下面將更加詳細地描述ASP.NET Framework的主要組件和功能。
1)公共語言運行庫的功能
公共語言運行庫管理內(nèi)存、線程執(zhí)行、代碼執(zhí)行、代碼安全驗證、編譯及其他系統(tǒng)服務(wù)。這些功能是在公共語言運行庫上運行的托管代碼所固有的。
至于安全性,取決于包括托管組件的來源(如Internet、企業(yè)網(wǎng)絡(luò)或本地計算機)在內(nèi)的一些因素,托管組件被賦予不同程度的信任。這意味著即使用在同一活動應(yīng)用程序中,托管組件既可能能夠執(zhí)行文件訪問操作、注冊表訪問操作或其他需小心使用的功能,也可能不能夠執(zhí)行這些功能。
運行庫強制實施代碼訪問安全。例如,用戶可以相信嵌入在網(wǎng)頁中的可執(zhí)行文件能夠在屏幕上播放動畫或唱歌,但不能訪問他們的個人數(shù)據(jù)、文件系統(tǒng)或網(wǎng)絡(luò)。這樣,運行庫的安全性功能就使通過Internet部署的合法軟件能夠具有特別豐富的功能。
運行庫還通過實現(xiàn)稱為通用類型系統(tǒng)(CTS)的嚴格類型驗證和代碼驗證基礎(chǔ)結(jié)構(gòu)來加強代碼可靠性。CTS確保所有托管代碼都是可以自我描述的。各種Microsoft和第三方語言編譯器生成符合CTS的托管代碼,這意味著托管代碼可在嚴格實施類型保真和類型安全的同時使用其他托管類型和實例。
此外,運行庫的托管環(huán)境還消除了許多常見的軟件問題。例如,運行庫自動處理對象布局并管理對對象的引用,在不再使用它們時將它們釋放。這種自動內(nèi)存管理解決了2個最常見的應(yīng)用程序錯誤:內(nèi)存泄漏和無效內(nèi)存引用。
運行庫還提高了開發(fā)人員的工作效率。例如,程序員可以用他們選擇的開發(fā)語言編寫應(yīng)用程序,卻仍能充分利用其他開發(fā)人員用其他語言編寫的運行庫、類庫和組件。任何選擇以運行庫為目標的編譯器供應(yīng)商都可以這樣做。以.NET Framework為目標的語言編譯器使得用該語言編寫的現(xiàn)有代碼可以使用.NET Framework的功能,這大大減輕了現(xiàn)有應(yīng)用程序遷移過程中的工作負擔(dān)。
盡管運行庫是為未來的軟件設(shè)計的,但是它也支持現(xiàn)在和以前的軟件。托管和非托管代碼之間的互操作性使開發(fā)人員能夠繼續(xù)使用所需的COM組件和DLL。
運行庫旨在增強性能。盡管公共語言運行庫提供許多標準運行庫服務(wù),但是它從不解釋托管代碼。一種稱為實時(JIT)編譯的功能使所有托管代碼能夠以它在其上執(zhí)行的系統(tǒng)的本機語言運行。同時,內(nèi)存管理器排除了出現(xiàn)零碎內(nèi)存的可能性,并增大了內(nèi)存引用區(qū)域以進一步提高性能。
最后,運行庫可由高性能的服務(wù)器端應(yīng)用程序(如Microsoft SQL Server和Internet信息服務(wù)(IIS))承載。此基礎(chǔ)結(jié)構(gòu)使用戶在享受支持運行庫宿主的行業(yè)最佳企業(yè)服務(wù)器的優(yōu)越性能的同時,能夠使用托管代碼編寫業(yè)務(wù)邏輯。
2).NET Framework類庫
.NET Framework類庫是一個與公共語言運行庫緊密集成的可重用的類型集合。該類庫是面向?qū)ο蟮模⑻峁┙o用戶自己的托管代碼可從中導(dǎo)出功能的類型。這不但使.NET Framework類型易于使用,而且還減少了學(xué)習(xí).NET Framework的新功能所需要的時間。此外,第三方組件可與.NET Framework中的類無縫集成。
例如,.NET Framework集合類實現(xiàn)一組可用于開發(fā)用戶自己的集合類的接口。用戶的集合類將與.NET Framework中的類無縫地混合。
正如用戶對面向?qū)ο蟮念悗焖M哪菢樱?NET Framework類型使用戶能夠完成一系列常見編程任務(wù)(包括字符串管理、數(shù)據(jù)收集、數(shù)據(jù)庫連接及文件訪問等任務(wù))。除這些常見任務(wù)之外,類庫還包括支持多種專用開發(fā)方案的類型。例如,可使用.NET Framework開發(fā)下列類型的應(yīng)用程序和服務(wù)。
● 控制臺應(yīng)用程序。
● Windows GUI應(yīng)用程序(Windows窗體)。
● ASP.NET應(yīng)用程序。
● XML Web Services。
● Windows服務(wù)。
Windows窗體類是一組綜合性的可重用的類型,它們大大簡化了Windows GUI的開發(fā)。如果要編寫ASP.NET Web窗體應(yīng)用程序,可使用Web類。
3)客戶端應(yīng)用程序開發(fā)
客戶端應(yīng)用程序在基于Windows的編程中最接近于傳統(tǒng)風(fēng)格的應(yīng)用程序。這些是在桌面上顯示窗口或窗體從而使用戶能夠執(zhí)行任務(wù)的應(yīng)用程序類型。客戶端應(yīng)用程序包括諸如字處理程序和電子表格等應(yīng)用程序,還包括自定義的業(yè)務(wù)應(yīng)用程序(如數(shù)據(jù)輸入工具、報告工具等)。客戶端應(yīng)用程序通常使用窗口、菜單、按鈕和其他GUI元素,并且它們可能訪問本地資源(如文件系統(tǒng))和外圍設(shè)備(如打印機)。
另一種客戶端應(yīng)用程序是作為網(wǎng)頁通過Internet部署的傳統(tǒng)ActiveX控件(現(xiàn)在被托管Windows窗體控件所替代)。此應(yīng)用程序非常類似于其他客戶端應(yīng)用程序:它在本機執(zhí)行,可以訪問本地資源,并包含圖形元素。
過去,開發(fā)人員結(jié)合使用C/C++與Microsoft類(MFC)或應(yīng)用程序快速開發(fā)(RAD)環(huán)境(如Microsoft Visual Basic)來創(chuàng)建此類應(yīng)用程序。.NET Framework這些現(xiàn)有產(chǎn)品的特點合并到了單個且一致的開發(fā)環(huán)境中,該環(huán)境大大簡化了客戶端應(yīng)用程序的開發(fā)。
包含在.NET Framework中的Windows窗體類旨在用于GUI開發(fā)。用戶可以輕松創(chuàng)建具有適應(yīng)多變的商業(yè)需求所需的靈活性的命令窗口、按鈕、菜單、工具欄和其他屏幕元素。
例如,.NET Framework提供簡單的屬性以調(diào)整與窗體相關(guān)聯(lián)的可視屬性。在某些情況下,基礎(chǔ)操作系統(tǒng)不支持直接更改這些屬性,而這時.NET Framework將自動重新創(chuàng)建窗體。這是.NET Framework集成開發(fā)人員接口從而使編碼更簡單更一致的許多方法之一。
和ActiveX控件不同,Windows窗體控件具有對用戶計算機的不完全受信任的訪問權(quán)限。這意味著二進制代碼或在本機執(zhí)行的代碼可訪問用戶系統(tǒng)上的某些資源,例如GUI元素和訪問受限制的文件,但這些代碼不能訪問或危害其他資源。由于具有代碼訪問安全性,許多曾經(jīng)需要安裝在用戶系統(tǒng)上的應(yīng)用程序現(xiàn)在可以通過Web部署。應(yīng)用程序可以在像網(wǎng)頁那樣部署時實現(xiàn)本地應(yīng)用程序的功能。
4)服務(wù)器應(yīng)用程序開發(fā)
在托管領(lǐng)域中,服務(wù)器端應(yīng)用程序是通過運行庫宿主實現(xiàn)的。非托管應(yīng)用程序承載公共語言運行庫,后者使用戶的自定義托管代碼可以控制服務(wù)器的行為。此模型在獲得主服務(wù)器的性能和可伸縮性的同時提供給用戶公共語言運行庫和類庫的所有功能。
圖1-2為顯示在不同服務(wù)器環(huán)境中運行托管代碼的基本網(wǎng)絡(luò)架構(gòu)。在應(yīng)用程序邏輯通過托管代碼執(zhí)行時,服務(wù)器(如IIS和SQL Server)可執(zhí)行標準操作。

圖1-2 服務(wù)器端托管代碼的基本網(wǎng)絡(luò)架構(gòu)
ASP.NET是使開發(fā)人員能夠使用.NET Framework開發(fā)基于Web的應(yīng)用程序的宿主環(huán)境。但是,ASP.NET不止是一個運行庫宿主,它是使用托管代碼開發(fā)網(wǎng)站和通過Internet分布的對象的完整結(jié)構(gòu)。Web窗體和XML Web Services都將IIS和ASP.NET用做應(yīng)用程序的發(fā)布機制,并且兩者在.NET Framework中都具有支持類集合。
XML Web Services作為基于Web的技術(shù)的重要發(fā)展,是類似于常見網(wǎng)站的分布式服務(wù)器端應(yīng)用程序組件。但是,與基于Web的應(yīng)用程序不同,XML Web Services組件不具有UI并且不以瀏覽器(如Internet Explorer和Netscape Navigator)為目標。XML Web Services由旨在供其他應(yīng)用程序使用的可重用的軟件組件組成,所謂其他應(yīng)用程序包括:傳統(tǒng)的客戶端應(yīng)用程序、基于Web的應(yīng)用程序,甚至是其他XML Web Services。因此,XML Web Services技術(shù)正迅速地將應(yīng)用程序開發(fā)和部署推向高度分布式Internet環(huán)境。
如果用戶使用過ASP技術(shù)的早期版本,很快就會注意到ASP.NET和Web窗體提供的改進。例如,用戶可以用支持.NET Framework的任何語言開發(fā)Web頁。此外,用戶的代碼不再需要與HTTP文本共享同一個文件(盡管如果用戶愿意,代碼還可以繼續(xù)這樣做)。Web窗體頁用本機語言執(zhí)行,這是因為與所有其他托管應(yīng)用程序一樣,它們充分利用運行庫。與此相對照,非托管ASP頁始終被寫成腳本并解釋。ASP.NET頁比非托管ASP頁更快、更實用并且更易于開發(fā),這是因為它們像所有托管應(yīng)用程序一樣與運行庫進行交互。
.NET Framework還提供類和工具的集合來幫助開發(fā)和使用XML Web Services應(yīng)用程序。XML Web Services是基于SOAP(一種遠程過程調(diào)用協(xié)議)、XML(一種可擴展的數(shù)據(jù)格式)和WSDL(Web服務(wù)描述語言)這些標準生成的。基于這些標準生成.NET Framework的目的是為了提高與非Microsoft解決方案的互操作性。
例如,.NET Framework SDK所包含的Web服務(wù)描述語言工具可以查詢在Web上發(fā)布的XML Web Services,分析它的WSDL描述,并產(chǎn)生C#或Visual Basic源代碼,用戶的應(yīng)用程序可以使用這些代碼而成為XML Web Services的客戶端。這些源代碼可以創(chuàng)建從類庫中的類派生的類,這些類使用SOAP和XML分析處理所有基礎(chǔ)通信。雖然用戶可以使用類庫來直接使用XML Web Services,但Web服務(wù)描述語言工具和包含在SDK中的其他工具可以使用戶更加方便地用.NET Framework進行開發(fā)。
如果用戶開發(fā)和發(fā)布自己的XML Web Services,.NET Framework為用戶提供了一組符合所有基礎(chǔ)通信標準(如SOAP、WSDL和XML)的類。使用這些類使用戶能夠?qū)⒆⒁饬性诜?wù)的邏輯上,而無須關(guān)注分布式軟件開發(fā)所需要的通信基礎(chǔ)結(jié)構(gòu)。
最后,與托管環(huán)境中的Web窗體頁相似,用戶的XML Web Services將使用IIS的可伸縮通信以本機語言的速度運行。
- JavaScript實例自學(xué)手冊
- 機器學(xué)習(xí)與大數(shù)據(jù)技術(shù)
- 數(shù)據(jù)挖掘?qū)嵱冒咐治?/a>
- TensorFlow Reinforcement Learning Quick Start Guide
- 從零開始學(xué)C++
- Visual C++項目開發(fā)案例精粹
- 典型Hadoop云計算
- FANUC工業(yè)機器人配置與編程技術(shù)
- Natural Language Processing and Computational Linguistics
- Microsoft Dynamics CRM 2013 Marketing Automation
- 手把手教你學(xué)Photoshop CS3
- 自適應(yīng)學(xué)習(xí):人工智能時代的教育革命
- 計算機應(yīng)用基礎(chǔ)學(xué)習(xí)指導(dǎo)與練習(xí)(Windows XP+Office 2003)
- 巧學(xué)活用AutoCAD
- Intel Edison Projects