摘要:ASP.NET又叫ASP+,但並不只僅是ASP的簡單升級,而是MicroSoft推出的新一代Active Server Pages腳本語言。ASP.NET是微軟發展的新型體系結構.NET的一部分,它的全新技術架構會讓每個人的網絡生活都變得更簡單。html
從今天開始,我爲你們講解ASP.NET編程,一開始主要以理論爲主,在後面的課程中會加入實操。歡迎你閱讀《ASP.NET編程入門》,經過對本書的閱讀,咱們相信你可以對ASP.NET會有更深刻的瞭解。數據庫
首先須要特別指出的是,ASP.NET不只僅只是有了一個新界面而且修復了一些缺陷的ASP3.0的升級版本(即不一樣於ASP2.0升級到ASP3.0的轉變)。更爲重要的是,ASP.NET吸取了ASP之前版本的最大優勢並參照Java、VB語言的開發優點加入了許多新的特點,同時也修正了之前的ASP版本的運行錯誤。編程
要了解ASP.NET的真實面目,咱們首先就得了解一下微軟.NET戰略。windows
1.1.1 微軟.NET的歷史瀏覽器
隨着網絡經濟的到來,微軟公司但願幫助用戶,可以在任什麼時候候、任何地方、利用任何工具均可以得到網絡上的信息,並享受網絡通訊所帶來的快樂。.NET戰略就是爲着實現這樣的目標而設立的。緩存
微軟公開宣佈,從此將着重於網絡服務和網絡資源共享的開發工做,並稱,將會爲公衆提供更加豐富、有用的網絡資源與服務。安全
微軟新一代平臺的正式名稱叫作"新一代Windows服務"(NGWS),如今微軟已經給這個平臺註冊了正式的商標--MicroSoft.Net。在.Net環境中,微軟不只僅是平臺和產品的開發者,而且還將做爲架構服務提供商、應用程序提供商,開展全方位的Internet服務。在談及這個平臺中使用的新技術,微軟透露,它將在.Net環境中提供更多新產品和一攬子的全套服務。服務器
MicroSoft .NET平臺的基本思想是: 側重點從鏈接到互聯網的單一網站或設備上,轉移到計算機、設備和服務羣組上,使其通力合做,提供更普遍更豐富的解決方案。用戶將可以控制信息的傳送方式、時間和內容。計算機、設備和服務將可以相輔相成,從而提供豐富的服務,而不是像孤島那樣,由用戶提供惟一的集成。企業能夠提供一種方式,容許用戶將它們的產品和服務無縫地嵌入本身的電子構架中。這種思路將擴展二十世紀八十年代首先由PC賦予的我的權限。網絡
MicroSoft .NET將開創互聯網的新局面,基於HTML的顯示信息將經過可編程的基於XML的信息獲得加強。XML是經"萬維網聯盟"定義的受到普遍支持的行業標準,Web瀏覽器標準也是由該組織建立的。微軟公司爲開發它投入了大量精力,但它並非MicroSoft的專有技術。XML提供了一種從數據的演示視圖分離出實際數據的方式。這是新一代互聯網的關鍵,提供了開啓信息的方式,以便對信息進行組織、編程和編輯;能夠更有效地將數據分佈到不一樣的數字設備;容許各站點進行合做,提供一組能夠相互做用的"Web服務"。多線程
1.1.2 微軟.NET的介紹
1.1.2.1 MicroSoft .NET綜述 MicroSoft .NET平臺包括用於建立和操做新一代服務的.NET基礎結構和工具;能夠啓用大量客戶機的.NET User Experience;用於創建新一代高度分佈式的數以百萬計的.NET積木式組件服務;以及用於啓用新一代智能互聯網設備的.NET設備軟件。
MicroSoft .NET產品和服務-包括Windows.NET,連同創建積木式服務的核心集成套件;MSNTM .NET;我的訂購服務;Office.NET;Visual Studio .NET;以及用於.NET的bCentralTM。
.Net環境中的突破性改進在於: 1. 使用統一的Internet標準(如XML)將不一樣的系統對接; 2. 這是Internet上首個大規模的高度分佈式應用服務架構; 3.使用了一個名爲"聯盟"的管理程序,這個程序能全面管理平臺中運行的服務程序,而且爲它們提供強大的安全保護後臺;
.NET平臺包括以下組件: 1.用戶數據訪問技術。其中包括一個新的基於XML的、以瀏覽器爲組件的混合信息 架構,叫作"通用畫板"; 2.基於Windows DNA 2000的構建和開發工具; 3.一系列模塊化的服務,其中包括認證、信息傳遞、存儲、搜索和軟件送遞功能; 4.一系列驅動客戶設備的軟件;
1.1.2.2 Microsoft.NET平臺帶來的重要意義
咱們來看一下MicroSoft .NET對開發人員、IT專業人員、以及企業應用的巨大意義。
對於開發人員MicroSoft .NET的策略是將互聯網自己做爲構建新一代操做系統的基礎,對互聯網和操做系統的設計思想進行合理延伸。這樣,開發人員必將建立出擺脫設備硬件束縛的應用程序,以便輕鬆實現互聯網鏈接。MicroSoft .NET無疑是當今計算機技術通向計算時代的一個很是重要的里程碑。
NET的核心組件有: 一組用於建立互聯網操做系統的構建塊,其中包括Passport.NET(用於用戶認證)以及用於文件存儲的服務、用戶首選項管理、日曆管理以及衆多的其它任務構建和管理新一代服務的基本結構和工具,包括Visual Studio.NET、.NET企業服務器、.NET框架和Windows.NET可以啓用新型智能互聯網設備的.NET設備軟件。
.NET用戶體驗 .NET對最終用戶來講很是重要,由於計算機的功能將會獲得大幅度提高,同時計算機操做也會變得很是簡單。特別地,用戶將徹底擺脫人爲的硬件束縛:用戶能夠自由衝浪於互聯網的多維時空,而不是束縛在便攜式電腦的方寸空間--可經過任何桌面系統、任何便攜式電腦、任何移動電話或PDA進行訪問,並可對其進行跨應用程序的集成。
.NET可以使用戶輕鬆進行互聯網鏈接,並輕鬆完成那些在當今看來十分費時並且費力的事務,它們每每要求用戶進行數據重輸入並需運行幾個小時才能完成。經過將多項安全數據流合併到單一的用戶界面(或者甚至是可編程決策引擎),.NET架構將用戶從充斥於當今Web的數據豎井的束縛中解脫出來。用戶能夠自由訪問、自由查看、自由使用他們的數據。
.NET對開發人員來講也十分重要,由於它不但會改變開發人員的開發應用程序的方式,並且使得開發人員能建立出全新的各類應用程序。新型開發範例的核心是Web服務這個概念的引入。Web服務是一種經過簡單對象訪問協議(SOAP),在互聯網上展露其功能性的、極爲公開的服務。SOAP是一種基於可擴展標記語言(XML)制定的協議。
在過去,開發人員經過集成本地系統服務來構建應用程序。在這種模型下,開發人員能夠訪問豐富的開發資源並能嚴格控制應用程序的行爲。
現在,開發人員已在很大程度上掙脫了這種模型的束縛,致力於構建具備複雜結構的n層化系統,這種系統能將網絡上衆多的應用程序一併進行集成,大大提高了應用程序的價值。這樣,開發人員即可把精力集中在充分挖掘軟件獨特的商業價值,而不是構建基本結構上。可喜的局面將應運而生:軟件投放市場的時間大大縮短、開發人員的編程效率明顯提升,最終把質量上乘的軟件呈現給用戶。
咱們正在進入一個嶄新的計算時代--一個由互聯網(尤爲是Internet核心技術XML)實現的時代。利用XML,可以建立出可供任何人從任何地方使用的、功能很是強大的應用程序。它極大地拓展了應用程序的功能,並實現了軟件的動態提供。在這種狀況下,軟件已不徹底指那些從光盤進行安裝的程序,而是演變成了一種服務--相似於ID調用程序或按收看次數進行收費的電視--人們可經過通訊媒體訂購的服務。
n層計算技術具備可以大幅度提升生產力、緊密耦合的特色,而Web概念具備面向消息、鬆散耦合的特色,咱們將兩者有機地糅合在一塊兒,實現了上述構想。咱們將這種計算風格稱爲Web服務,它的出現標誌着人類已經邁入應用程序開發技術的新紀元。Web服務是一種應用程序,它能夠經過編程並使用標準的Internet協議,像超文本傳輸協議(HTTP)和XML,將功能展現在互聯網和企業內部網上。還可將Web服務視做Web上的組件編程。
從理論上講,開發人員可經過調用Web應用編程接口(API),將Web服務集成到應用程序中。其調用方法與調用本地服務相似,不一樣的是Web API調用可經過互聯網發送給位於遠程系統中的某一服務。例如,MicroSoft Passport(Passport)服務使得開發人員可以對應用程序進行認證。經過對Passport服務編程,開發人員能夠充分利用Passport的基本結構,經過運行Passport來維護用戶數據庫,以確保其正常運行、按期備份等等。 .NET正是根據這種Web服務原則而建立的,微軟目前正着手提供這個基本結構,以便經過.NET平臺的每一部分來實現這種新型的Web服務。而Visual Studio.NET、.NET框架、Windows.NET和.NET企業服務器,正是爲進行基於Web服務模型的應用程序開發而度身定作的新一代開發工具和基本結構。.NET構建塊服務、新增的.NET設備支持以及即將到來的.NET用戶體驗,將爲人們完全攻克這一難題劃上一個圓滿的句號,令人們可以充分利用Web服務模型,如願以償地開發出新一代應用程序。
.NET對IT專業人員的重要意義 目前,IT專業人員可以利用與構建.NET平臺相同的技術。
.NET Enterprise Servers和Windows 2000操做系統,爲建立具備高度可管理性的、能迅速投入市場的應用程序提供了堅實基礎。它們利用的是可擴展標記語言(XML),所以隨着Web體系結構的革新,在此平臺上建立的程序依然頗有價值。
.NET平臺的核心是,採用有效的、分門別類的方式來構建應用程序,達到其史無前例的規模。該平臺上的Web服務模型指的是:企業應用程序的中心業務要素一般由本地管理,而支持它們的服務(如用戶認證、文件存儲、用戶首選項管理、日曆、郵件等等)卻無須本地管理,能夠被無縫訂購。爲了存儲用戶文件和郵件,IT專業人員每每在服務器上安裝新的獨立磁盤冗餘陣列(RAID陣列),而有了.NET,他們在這一方面將會花費較少的精力,而更多地致力於怎樣爲公司增長效益。
該Web服務模型還將動態配置新軟件的發佈和更新。用戶將以極其緊密的鏈接方式工做,所以更易於管理。而簡化的管理又可以使IT專業人員更能適應變幻莫測的業務需求。
開發應用程序的.NET Web服務模型將爲企業應用程序的建立開闢一條新路。經過企業內外多種服務的聯合,很容易把企業內部數據和客戶及合做夥伴的相關數據結合在一塊兒,大大簡化了應用程序的建立過程。這就爲最終用戶發掘了空前的功能涵蓋性。例如,利用某公司的僱員福利程序,能夠從其HR數據庫訂購信息,經過Web訂購福利管理公司的服務、訂購工資管理公司的服務。終端用戶能夠在簡單、直觀的界面下操做,而這個界面能夠顯示他們的累積休假時間、我的所得福利以及上次工資額。
.NET對企業的重要意義 MicroSoft .NET平臺將從根本上改善計算機和用戶之間進行交互的方式,最大限度地發揮電子商務中計算技術的重要做用。首先,讓咱們來分析一下當前商務計算世界的現狀:
人與計算機進行交互的手段極爲有限--一般使用鍵盤和鼠標進行輸入,使用監視器監控輸出。
用戶信息基本上是本地信息;若是從另外一臺機器進行登陸,則沒法獲取用戶的我的首選項設置、數據及應用程序。
用戶必須親自處理信息,而經過設置智能選項表明用戶自動進行操做,則無異因而紙上談兵。
同一用戶存放於不一樣應用程序和站點的數據,很難(或根本不可能)進行自動合併和關聯,用戶沒法統一進行查看。
想在家裏或在路上工做的用戶,不能方便地訪問辦公室電腦中的應用程序和數據。這無疑成爲一道阻止人們得到更高工做效率的鴻溝。
不能使用其它設備訪問專爲特定設備設計的數據(這些設備包括PC、尋呼機、移動電話以及PDA等);最多能夠按期進行同步。
.NET將保證徹底消除當今計算技術中的全部缺陷。.NET定能實現確保用戶從任何地點、任何設備均可訪問其我的數據和應用程序的宏偉藍圖。除此以外,.NET技術還可實現多個應用程序在邏輯上的鬆散耦合連接和緊密耦合連接。
用戶能夠經過手寫、語音和圖象技術與其我的數據進行交互。這些數據將安全地存放在互聯網上,用戶經過辦公室(或家庭)PC,還能夠經過移動電話或尋呼機、PDA、甚至是新發明的尋呼機--移動電話--PDA--PC聯合設備訪問這些數據。應用程序可進行靈活的功能調整,以適應用戶所用設備的功能情況。應用程序可根據用戶預約義的選項集和指令集,徹底代替用戶自動執行相應的操做。
上述功能將協同做用,以便大幅度地提升用戶使用計算技術的生產效率。根據設計,.NET使得用戶無需在如何與計算機進行交互上勞神,從而全身心地投入到使計算機自動執行任務、實現最終目標的工做中。經過使用XML行業標準,可將用戶數據進行跨站點和應用程序的連接,從而輕鬆實現當前很難實現的操做。好比:對用戶在數家不一樣銀行、信用卡公司以及計費代理商那裏的數據進行集中處理;這樣,用戶即可依據處理後的數據支付賬單,將費用明細報告歸檔。
.NET把僱員、客戶和商務應用程序整和成一個協調的、能進行智能交互的總體,而各公司無疑將是這場效率和生產力革命的最大受益者。簡言之,.NET承諾爲人類創造一個消除任何溝鴻的商務世界。
1.1.2.3 MicroSoft .NET 的基本模塊
網絡服務一覽
一般說來,一個網絡服務只是一個做爲服務――經過Internet標準此服務能與其它網絡服務集成在一塊兒――發行的簡單的應用程序。換句話說,它是可經過URL定位的自動將信息返回到須要它的客戶端那裏的一種資源。網絡服務一個重要的特色是客戶不須要知道一種服務是怎樣實現的。在本節中,我將向你解釋網絡及網絡服務如何把基於組件技術的最好的方面結合在一塊兒的,而且介紹與網絡服務通訊所需的基本框架。 同組件同樣,網絡服務提供"黑匣子"函數,它能夠被再次做用而不用關心此服務是怎樣實現的。網絡服務提供被稱爲契約的精肯定義的接口,此接口描繪了所提供的服務。開發人員能夠將遠程服務、本地服務和定置代碼組合在一塊兒而集成應用程序。例如,某公司可使用以下服務組建一在線商店:微軟護照(原文:Passport)服務以驗證用戶身份,第三方我的化服務以使網頁匹配每個用戶的參數,信用卡處理服務,銷售稅服務,對每一個運輸公司的包裹跟蹤服務,連接公司內部庫存管理程序的內部目錄服務,以及少許定置代碼以使他們的商店能脫穎而出。
然而,網絡服務與如今的組件技術不一樣,它不使用須要在服務器和客戶機有明確的、同類型基本構架的具體的對象模型協議,例如DCOM、 RMI或 IIOP 。儘管與具體組件技術緊密結合的實如今一個受控的環境中能很好地被接受,但它們在網絡環境中變得不切實際。由於一個集成商業程序的參與者會發生變化,隨着時間的推移,技術也在變化,因此在全部參與者間確保一個單一的、統一的體系架構就變得十分困難。網絡服務採起了另一種途徑,它使用普便存在的網絡協議和數據格式,如HTTP和XML,進行通訊。支持這些網絡標準的任何系統都支持網絡服務。
並且,網絡服務契約描述的是以術語報文形式提供的服務,這些服務是由網絡服務生成和接受的,而不是描述服務是如何實現的。經過把重點放在報文上,網絡服務模板就徹底對語言、平臺和對象模板一無所知。 用任何一套編程語言、對象模型和平臺的徹底特性集,均可實現網絡服務。網絡 服務可在任何平臺被用任何語言所實現的應用程序使用。只要用於解釋服務容量、報文序列和所指望協議的契約獲得認同,那麼所實現的網絡服務及網絡服務用戶就可相互不一樣,而不會影響會話另外一端的應用程序。
網絡服務模板對最小體系架構的要求很低,以確保網絡服務在使用任何技術和編程語言的平臺上實現和訪問。對網絡服務互用性的解決可只依靠網絡標準。然而,爲了使應用程序更容易使用網絡服務,簡單地贊成經過標準網絡協議就能夠訪問網絡服務是不夠的。當網絡服務和網絡服使用者依靠標準的方式表示數據和命令、表示網絡服務契約 、算出網絡服務所提供的容量時,網絡服務才容易使用。
XML是定義一個標準的、可擴展的用於提供命令和典型數據的語言明顯的一種選擇。雖然爲表示命令和典型數據能夠定義使用其它技巧(好比編碼爲一種查詢字符串)的規則,但XML被專門設計爲描述數據的標準元語言。簡單對象存取協議(SOAP)是以一種可擴展的方式使用XML表示數據和命令的工業標準。網絡服務可選擇用SOAP決定報文的格式。
XML是網絡服務契約的一種使能技術。服務契約語言 (SCL)是記錄網絡服務契約的XML語法。因爲SCL是基於XML的,因此對開發者和開發工具來講,容易生成、解釋契約。關於SCL細則的草案很快會出臺(注意:如今的SOAP Toolkit for Visual Studio 6.0支持稱爲SDL的SCL的早期版本)。
Disco 規範爲服務提供者發佈網絡 服務契約和相應的機制描述了一個標準方式,這將使開發者或開發工具可找到契約文獻。當你讀到這裏時, Disco規範的草案應出臺了。
象SOAP, SCL和Disco這樣的標準有助於開發者,由於它們不須要明白和實現所使用的每個網絡服務的訪問方式。支持這些標準的更好的、已充分測試的、高性能的體系架構將由開發平臺提供,這會大大簡化整個開發過程。
MicroSoft .NET Framework
MicroSoft .NET框架的目的是使你更容易創建網絡應用程序和網絡服務。圖2 顯示了MicroSoft .NET框架的體系。創建在操做系統最上層的服務,是管理運行時代碼需求的common language runtime,這些代碼能夠用任何現代編程語言所寫。Runtime提供了許多服務,這些服務有助於簡化代碼開發和應用程序的開發同時也將提升應用程序的可靠性。.NET Framework包括一套可被開發者用於任何編程語言的類庫。在此之上是許多應用程序模板,這些模板特定地爲開發網絡站點和網絡服務提供高級組件和服務。
Common Language Runtime
運行語言(runtime)調入並運行用任何運行感知編程語言所寫的代碼。以運行爲目標的代碼被稱爲受控(managed )代碼,受控代碼代碼只是意味着在內部可執行代碼與運行自身間存在已定義好的合做契約。對於象生成對象、調用方法等這樣的任務,被委託給了運行語言,這使得在運行語言能爲可執行代碼增長額外的服務。
運行語言以交叉語言集成、自描述組件、簡單配製和版本化及集成安全服務爲特色。
運行語言使用一種新的能表達大部分現代編程語言語義的通用類型系統,通用類型系統定義了一套標準類型及生成新標準的規則。運行語言知道怎樣生成、執行這些類型。編譯器和解釋器使用運行語言服務定義類型、管理對象、進行方法調用,而不是使用工具或特定於語言的方法。
類型系統的主要設計目的是使多種語言能深度集成。用一種語言所寫的代碼能繼承用另外一種語言所寫的類的實現,用一種語言所寫的代碼拋出的異常能被用另外一種語言寫的代碼捕獲,象調試和剖析之類的操做會在徹底封閉下工做,而不用考慮代碼所用的語言。這就意味着編寫可重用類庫的開發者,再也不須要爲每一種編程語言或編譯器生成一個版本,而且使用類庫的開發者再也不受到爲他們使用的編程語言開發的庫的限制。
自描述組件――如今MicroSoft .NET框架上已成爲可能――簡化了開發和配製,並提升了系統的可靠性。許多由運行語言提供的服務是由元數據及用於補充可執行代碼的信息所驅動。由於全部的信息都儲存在一塊兒,只有可執行的(代碼)才被稱爲自描述組件。
自描述組件的一個主要優勢是,使用它們並不須要其它文件。類的定義不須要單獨的頭文件;經過檢查元數據對類的定義能夠從組件自身得到。跨語言或過程邊界訪問組件並不須要各自的IDL文件、類型文件或proxy/stubs;所必需的信息已存在於元數據之中。爲識別開發者請示的服務屬性,並不須要展開各自的配製信息。 最主要的是,因爲元數據是在編譯過程當中由源代碼生成,並與可執行代碼儲存在一塊兒,它將永遠和可執行部分同步。
除了改善對單個組件的配製,Microsft .NET框架定義了一個應用程序配製模板,以解決定置應用程序安裝和DLL版本化(一般被稱爲"DLL Hell")這一複雜過程的問題,運行語言提供了支持這個模板的服務。 Microsft .NET框架 引入了組合體的概念。一個組合體是一組資源和類型,幷包括有關這些資源和類型的元數據,也就是被做爲一個單元配製的。元數據被稱爲組合體的名單,它包含象類型和資源表之類能被組合體外看得見的信息,這個名單也包括有關從屬關係之類的信息,例如組合體創建時的版本號。開發人員能夠指定版本策略,以指示運行語言是否裝入系統上已安裝的依賴於組合體的最新版本,裝入一指定版本,或在編譯時使用的版本。
某軟件組件的多個拷貝總能夠存在於一樣的操做系統上,然而,一般說來,只有其中的一個拷貝能被操做系統註冊、調入內存、執行。對系統來講,定位和調入內存的策略是全局性。.NET Framework Common Language Runtime 增長了所必須的體系架構以支持管理組件定位和調入的每一個應用程序策略,這一般被稱爲並行配製。
組合體能夠被一個應用程序私有,或被多個應用程序共享。一個組合體的多個版本能夠同時配製在同一臺機器上。應用程序配製信息定義了到何處去查找組合體,這樣runtime就能爲同時運行的兩個不一樣的應用程序裝入同一組合體的不一樣版本。這就消除了由組件版本的不兼容性引發的問題,提升了系統總體的穩定性。若是必要,若是必要,管理員能夠爲配製時刻的組合體增長配製信息,例如一個不一樣的版本策略,可是編譯時提供的原始信息永遠不會丟失。
由於組合體是自描述的,因此並不須要在系統上進行顯式註冊。應用程序的配製簡單到只需將文件拷貝到目錄中既可(若是爲了使應用程序可以運行,必須安裝未經組織過的組件的話,狀況會稍微複雜一點)。配製信息保存在可被任何文本編輯器編輯的XML文件中。
最後,運行語言也提供完整的、廣泛深刻的安全服務,以確保未經受權的用戶不能訪問機器上的資源,而且代碼不會執行未經容許的動做。這就提升了系統總體的安全性可靠性。 因爲運行語言用於裝入代碼、生成對象、執行方法調用,因此當受控代碼裝入內存、執行時,運行語言能進行安全檢查,強化安全策略。 Microsft .NET框架不只規定代碼訪問安全,還規定基於角色的安全。經過代碼訪問安全機制,開發人員能爲應用程序指定完成工做所必需的權限。例如,代碼或許須要寫文件或訪問環境變量的權力。這類信息和有關代碼標誌的信息一塊兒存儲在配製級上的。當代碼裝入內存及執行方法調用時,運行語言驗證是否能給予代碼所要求的權限。若是不能,將記錄一條安全衝突信息。給予權限的策略,這被稱爲信任策略,是由系統管理員創建的,而且是創建在關於代碼的證據基礎之上,好比:代碼是誰發佈的,是從什麼地方得到的,以及在組合體中找到的代碼標誌和它要求的權限。開發人員能夠指定他們顯然不須要的權限,以防止其它人惡意使用他們的代碼。若是所須要的權限依賴直到運行時刻纔會知道的信息,那麼就可寫入綱鄰性的安全檢查。 除了代碼訪問安全,運行語言還支持基於角色的安全。基於角色的安全創建同代碼訪問安全同樣的權限模板,只是這些權限是創建在用戶的身份之上,而不是創建在代碼的標誌之上。角色代表了用戶所屬的類,而且能夠在開發和配製階段定義。給予權限的策略被分配到每一個預約義的角色。在運行時刻,用戶的身份被肯定,代碼將表明這個身份運行。運行語言決定用戶是哪一個角色的成員,而後給予基於這個角色的權限。
在查看Microsft .NET框架的可編程模板前,先看一下它所提供的服務。
服務框架 在Common Language Runtime之上是服務框架,此框架提供能被任何現代編程語言調用的類。全部的類都遵循一套命名和設計方針,以大大減少開發人員的學習上的彎路。
框架包括一套開發人員但願在標準語言庫中存在的基類庫,例如:集合、輸入/輸出,字符串及數據類。另外,基類庫提供訪問操做系統服務如圖畫、網絡、線程、全球化和加密的類。服務框架也包括數據訪問類庫,及開發工具,如調試和剖析服務,可以使用的類。本文章沒有詳細討論全部的類,我將重點放在數據訪問類上,由於大多數網絡服務須要對數據的訪問。固然,你能夠在MicroSoft .NET Framework SDK中找到關於服務框架類庫的附加信息。
數據訪問服務 幾乎全部的網絡服務都須要查詢和更新永久性數據,不管是以簡單文件,仍是以相關數據庫,或是以其它的存儲類型存在。爲了提供對數據的訪問,服務框架包括ActiveX Data Objects+ (ADO.NET)類庫。如同名子所暗示地那樣,ADO.NET由ADO發展而來。ADO+被設計爲基於網絡的可擴展的應用程序和服務提供數據訪問服務。ADO.NET爲鏈接的指針風格的數據訪問,同時也爲更適合於把數據返回到客戶端應用程序的無鏈接的數據模板提供高性能的APIs流,就象在之後介紹的那樣。
就象其他幾個部分同樣,ADO.NET定義了那些連接數據倉庫、 對數據倉庫發送命令及從中獲取結果的類。這些類由受控數據提供者(managed data provider)實現。ADO+中連接和命令對象看上去和ADO中的是同樣的,而且一個名爲DataReader的新類提供了經過高性能API流獲取結果的能力。DataReader在功能上同前向、只讀的ADO記錄集(Recordset)是等同的,可是DataReader被設計用來最小化內存中生成的對象的數量,以提升性能,避免垃圾積累。在.NET Framework中包含了針對MicroSoft SQL Server?的受控數據提供者以及可經過OLE DB訪問的任何數據倉庫。
ADO.NET的一個主要創新是引入了數據集(Dataset)。一個數據集是內存中提供數據關係圖的高速緩衝區。數據集對數據源一無所知,它們能夠由程序或經過從數據倉庫中調入數據而被生成、填充。不論數據從何處獲取,數據集都是經過使用一樣的程序模板而被操做的,而且它使用相同的潛在的數據緩衝區。使用.NET平臺的開發人員可以用數據集代替傳統ADO中無鏈接的記錄集。
受控數據提供者爲數據倉庫和數據集公開一名爲DataSetCommand 的接口對象。DataSetCommand 使用ADO.NET連接和命令以從數據倉庫中填充數據集,並把在數據集中發生的變化解析到數據倉庫中。
就象DataReaders 顯示了對於相關數據的有效的流訪問同樣,XmlReaders 顯示了對XML數據的流訪問。開發人員使用DataNavigator 能夠滾動和編輯內存中的XML文檔。DataNavigator在功能上和W3C Document Object Model (DOM)是同樣的,但它更有效,並提供了能很好映射關係數據表的對象模板。DataNavigator 支持Xpath語法以對數據流進行導航。ADO.NET爲那些但願繼續使用DOM做爲XML對象模板而不是使用更有效的DataNavigator模板的開發人員提供了一個XMLDocument類。
因爲全部的數據均可被看做XML,因此開發人員能夠爲任何數據使用轉換和確認服務。ADO.NET定義了一個消費DataNavigator、生成一個新的XmlReader的通用轉換體系。.NET Framework提供了一個支持W3C XSL Transformations (XSLT)細則的特殊轉換組件。ADO.NET同時提供了一使用XML簡圖確認XmlReader的確認引擎。ADO.NET支持經過DTDs, XSD或 XDR定義的簡圖。
表單應用模板
從概念上講,在服務框架的最上面是兩個應用程序模板:Windows應用程序模板和網絡應用程序模板。儘管我把重點放在把微軟.NET 框架用做開發網絡服務和網絡應用程序的一種途徑上,但框架也可用於開發較傳統的基於Windows的應用程序(固然,這些應用程序也能使用網絡服務)。
編寫Windows客戶應用程序的開發人員可以使用Win表單應用程序模板以利用Windows豐富的用戶接口特色,包括如今的ActiveX控件和Windows 2000的新特色,如透明的、分層的、浮動窗口。能夠選擇傳統的Windows或網絡外觀。得知它和如今的基於Windows表單包的類似性之後,開發人員會發現Win表單可編程模板和對設計階段的支持很是直觀。
Win 表單利用了Microsft .NET框架 runtime以減小基於Windows的客戶應用程序的開銷。只要應用程序和組件是用Win所寫或被Win表單應用程序使用,那麼它們就能被框架安全模板在客戶機上安全地執行。若是以這種方式使用或執行,那麼某人從Internet下載下來的生猛遊戲就不會對配製信息和數據產生破壞,不然會自動地給用戶地址薄裏的每個人發送電子郵件。
Microsft .NET框架 裝配模板簡化了應用程序的配製和版本化 。應用程序可被配製爲使用它們在編譯和測試所用的共享組件,而不是使用剛好在客戶機器上安裝的隨便什麼版本的組件,這就提升了應用程序的可靠性,減小了應用程序所支持調用的主要因素:用戶接口控件和其它共享組件版本的不兼容性。
網絡應用程序模板創建在Microsft .NET框架 上網絡應用程序共享一個通用應用程序模板。在這個模型中,網絡應用程序是一套起源於基URL 的URLs。所以它包含用於生成在瀏覽器中觀看的網頁的網絡應用程序和網絡服務。在本節中,我將詳細介紹稱爲Active Server Pages+ (ASP.NET)的網絡應用程序可編程模板如同你從名字猜到的那樣,ASP.NET是由活動服務器頁面發展而來。ASP.NET利用common language runtime 和服務框架網絡應用程序提供了一個可靠的、自動化的、可擴展的主機環境。ASP.NET也受益於common language runtime 集成模板,簡化了應用程序的配製。另外,它提供簡化應用程序開發的服務(如狀態管理服務)以及高水平的編程模板(如ASP.NET Web Forms和ASP.NET Web Services)。
ASP.NET的核心是HTTP運行語言,一個高性能的用於處理基於低級結構的HTTP請求的運行語言,而基於的結構與MicroSoft Internet Information Services (IIS)所提供的ISAPI結構類似。如同你在圖5所看到的,HTTP 運行語言是在象服務器上的IIS或客戶機上的IE之類的unmanaged 主機過程當中運行的受控代碼。HTTP runtime負責處理引入的全部HTTP請求,並對每一個請求應用程序的URL進行解析,而後把請求分配到應用程序以進行進一步的處理。HTTP 運行語言是多線程的,並異步處理請求,所以劣質的應用程序代碼阻礙不了它對新請求的處理。並且HTTP 運行語言假定失敗必會發生,所以它被控制爲盡最大力量自動地從訪問衝突、內存泄漏、死鎖等事故中恢復過來。除非是硬件故障,運行語言的目標是100%的可靠性。
ASP.NET使用基於構件的Microsft .NET框架配製模板,所以它得到了如XCOPY配製、構件並行配製、基於XML配製等優勢。ASP.NET另外一個主要優勢是,它支持應用程序的實時更新。管理員沒必要關掉網絡服務器或者甚至不用中止應用程序的運行就能夠更新應用文件。應用程序文件永遠不會被加鎖,所以甚至在程序運行時文件就能夠被覆蓋。當文件更新後,系統會溫和地轉換到新的版本。系統檢測文件變化,並用新的應用程序代碼創建一個新的應用程序實例,而後將引入的請求路由到應用程序。當全部被現存的應用程序實例處理的未完成的請求處理完後,該實例就被銷燬了。
在應用程序中,HTTP請求是經過HTTP模塊的一個管道路由的,最終到達請求處理程序。HTTP模塊和請求處理程序是一些實現特殊接口的受控類,而這些接口是由ASP.NET定義的。這種管道結構使得爲應用程序增長服務很是方便:只需補充一個HTTP模塊。例如,安全,狀態管理及跟蹤都被實現爲HTTP模塊。高級可編程模塊,如網絡服務和網絡表單,一般被實現爲請求處理程序。一個應用程序能連接與多個請求處理程序--每一個處理程序一個URL,可是全部的HTTP請求都經過一樣的管道路由。
網絡基本上是一個無狀態模型,而且在HTTP請求間沒有聯繫,這使得編寫網絡應用程序很困難,由於應用程序一般須要維護跨多個請求的狀態。ASP.NET加強了由ASP引入的狀態管理服務,以便爲網絡應用程序提供三種類型的狀態:應用程序、會話、用戶。就象在ASP中同樣,應用程序狀態特定於一個應用程序實例,而且不會持久。會話狀態是特定於一個用戶與應用程序間的會話的。與ASP會話狀態不一樣,ASP.NET會話狀態儲存在一個獨立的過程當中,而且可把它配製成能夠儲存到一個獨立的機器上。這使得會話狀態當應用程序在網絡羣(Web farm)擴展時很是有用。用戶狀態相似於會話狀態,但一般它不會超時,而且是永久性的。所以,用戶狀態對儲存用戶參數和其它個性化的信息是有用的。全部狀態管理服務都被實現爲HTTP模塊,所以它們容易增長到應用程序管道中,或從中刪除。若是除了由ASP.NET提供的服務外,還須要額外的狀態管理服務,那麼可由第三方的模塊提供。
ASP.NET一樣提供高速緩衝服務,以改善性能。輸出緩衝可徹底節省網頁翻譯,段緩衝儲存部分的網頁。因爲提供了相應的類,因此只要須要,應用程序、HTTP模塊以及請求處理程序能夠在高速緩存中儲存任意數量的對象。
下面快速瀏覽一下創建在ASP.NET可編程模塊之上的兩個高級可編程模塊:ASP.NET 網絡 表單和 ASP.NET 網絡 服務。
ASP.NET 網絡表單
網絡表單把基於Visual Basic?的表單的高生產性的優勢帶到了網絡應用程序的開發中來。網絡表單支持傳統的將HTML內容與角本代碼混合的ASP語法,可是它提出了一種將應用程序代碼和用戶接口內容分離的更加結構化的方法。引入的網絡表單控件用於爲封裝通用用戶接口元素提供了一種機制。這些新的特色使得開發工具在支持VB小應用程序的同時,也支持設計時模塊,使得WUSIWYG工具支持網頁佈局。
網絡表單控件負責生成用戶接口,典型狀況是在HTML表單中。ASP.NET是提供了一套映射傳統的HTML用戶接口小部件(包括列表框,文本框和按鈕)的網絡表單控件和一套附加的更加複雜的網絡控件(如日曆和廣告轉板)。這些控件的一個重要特色是,它們能夠被編寫以適應客戶端的能力;同一網頁把大範圍的客戶端平臺和表單因素做爲目標。換句話說,網絡表單控件能"嗅"到正在查找表單的客戶,而後返回合適的用戶經驗――多是適合低級瀏覽器的HTML3.2或是適於IE5.0的動態HTML。
考慮到網絡是一種無狀態的聯接模型,網絡應用程序開發人員所面臨的一個很複雜的問題是,他們要對用戶與基於網絡的接口的交互做用做出反應。網絡利用ASP.NET的體系架構提供了一套豐富的服務,以幫助開發人員創建交互式網頁。這些服務的淨做用是使基於組件的、事件驅動的可編程模塊,對開發人員來講,很是象客戶端的表單程序設計。用戶與網頁交互做用的狀態管理的複雜性被ASP.NET 網絡 表單和網絡表單控件隱藏起來了。對開發人員來講,提供的豐富數據綁定服務使得顯示經過數據訪問服務獲得的數據變得很是容易。
代碼與內容的分離使ASP.NET網頁能動態地編譯到受控類中,用以提升性能。每一個引入的HTTP請求都被傳遞到一個新的網頁實例,所以開發人員不須要關心代碼中的線程安全性。
ASP.NET 網絡服務
ASP.NET 網絡 服務體系架構爲用ASP.NET創建網絡 服務提供了一高級可編程模板。雖然創建網絡服務並不須要使用網絡 服務平臺,可是它提供許多的優勢將簡化開發過程,而且它使用的編程模型對用ASP或VB工做的開發人員來講是很熟悉的。使用這個可編程模型,開發人員不須要理解HTTP、SOAP或其它任何網絡服務規範。
開發人員用ASP.NET生成一個擴展名爲.asmx的文件,並把此文件配製爲網絡應用程序的一部分,就創建起了一個網絡 服務。ASMX文件或者包含對在其它地方定義的受控類的引用,或者包含這個類的定義。這個類是由ASP.NET提供的WebService類所派生。公有的類方法在標記上WebMethod屬性後,就會成爲網絡服務方法,把HTTP請求發送到ASMX文件中的URL後,這些方法就會被調用。你沒必要手工爲你的網絡服務創建一個契約。當被調用者請求時,ASP.NET檢查類的元數據,以自動生成SCL文件。
客戶可經過SOAP,HTTP GET 和HTTP POST提交請求。對方法和參數進行編碼的約定是:對HTTP GET,將被編碼爲查詢字符串;對HTTP POST,將被編碼爲表單數據。HTTP GET 和HTTP POST 的機制不如SOAP有力,可是它們使得客戶在訪問網絡服務時沒必要支持SOAP。
ASP.NET 網絡服務模型假定了一個無狀態服務結構。無狀態結構一般比有狀態結構更具可擴展性。每次收到一個服務請求後,就生成一個新對象,請求被轉化爲一個方法調用,當方法調用返回時對象被銷燬。若是這些服務須要跨請求維護狀態,那麼它們將使用ASP.NET狀態管理服務。基於ASP.NET的網絡服務在網絡應用程序模型中運行,所以它們獲得了該模型的全部安全、配製和其它優勢。
ASP.NET 網絡服務還提供了一個爲在SCL文件中描述的網絡服務生成分類的受控代理工具。代理生成器把SCL文件中描述的消息映射成受控類中的方法。代理對應用程序代碼隱藏了全部的網絡和引導設備,所以使用網絡服務看起來就象使用其它受控代碼同樣。代理將優先使用SOAP連接網絡服務,可是它一樣支持HTTP GET和 HTTP POST機制。所以HTTP GET和 HTTP POST一樣也能被使用。
網絡服務爲在Internet上綁定應用程序提供了一個利用現存體系架構和應用程序的簡單的、靈活的、基於許多標準的模型。網絡應用程序很容易與當地開發的服務或已存在的服務集成在一塊兒,而不用考慮開發平臺、開發語言或使用的對象模型,以用於實現任何組成的服務或應用程序。
Microsft .NET框架在現有開發人員技巧之上,提供了一個應用程序模板和關鍵技術,用於簡化安全、可靠、可擴展、高可用性的網絡服務的創建、部署和不斷的發展。
經過上面的介紹,咱們可以感受到MicroSoft .NET對於咱們從此的程序設計將產生巨大的影響。
1.1.3 ASP.NET歷史
咱們在講述ASP.NET歷史以前,讓咱們來回顧一下ASP。
ASP的第一個版本是0.9測試版。它給WEB開發帶來一陣暴風,它可以將代碼直接嵌入HTML,使得設計WEB頁面變得更簡單,更強大,而且經過內置的組件可以實現強大功能,最明顯的就是ActiveX Data Objects (ADO),它使得創建一個動態頁面如小孩子玩遊戲同樣簡單。
最終出場的是Active Server Page 1.0,它作爲IIS的附屬產品免費發送。而且不久就在Windows平臺上普遍使用。ASP與ADO的結合使用開發者很容易地在一個數據庫中創建和打開一個記錄集。這不無疑是它如此快就被大衆接受的因素,由於你如今能使用這些腳本創建和打開一個記錄集,處理和輸出任何數據,以任何順序,幾乎只要你能想到的,它就能完成。
1998年,微軟公司又發佈了ASP 2.0 。ASP 1.0和ASP 2.0主要區別是外部的組件須要實例化。有了ASP 2.0 和IIS 4.0,咱們就有可能創建ASP應用了,並且每一個組件就有了自已單獨的內存空間。內置的MicroSoft Transaction Server(MTS)也使用製作組件便得簡單。
微軟公司接着開發了Windows 2000操做系統。 這個Windows版本給咱們帶上了IIS 5.0 以及 ASP 3.0。這次並非簡單對ASP進行補充,核心的不一樣其實是把不少的事情交給了COM來作。在windows 2000中,微軟結合了MTS與COM核心環境作出了COM+,這就讓主機有了一種新的方法來使用組件,一樣給主機帶來了更多的穩定性,成了一個能夠升級的效率高的工做平臺。IIS 5.0在表面上彷佛沒有改什麼,可是在接口上動的手術比較大。在內部,它使用COM+ 組件服務來對組件提供一個更好的執行的環境。
有了這些,微軟公司推出了ASP.NET,ASP.NET又叫ASP.NET,他不是ASP的簡單升級,而是MicroSoft推出的新一代Active Server Pages。ASP.NET是微軟發展的新的體系結.NET的一部分,其中全新的技術架構會讓每一個人的編程生活變得更的簡單。
1.1.4小結
在本章中,咱們介紹了微軟.NET的歷史,以及對.NET的構成、性能進行了一個詳細的介紹,同時,咱們還詳細介紹了ASP.NET的歷史。在下面的章節中,咱們將按實例一步一步的講解ASP.NET。