出版時間:2013-1 出版社:電子工業(yè)出版社 作者:蔣金楠 頁數(shù):578 字?jǐn)?shù):855000
Tag標(biāo)簽:無
前言
ASP.NET MVC是一個建立在ASP.NET平臺上基于MVC模式的Web開發(fā)框架,它提供了一種與傳統(tǒng)Web Forms完全不同的Web應(yīng)用開發(fā)方式。ASP.NET Web Forms借鑒了Windows Forms基于控件和事件注冊的編程模式,使Web應(yīng)用的開發(fā)變得簡單而快捷,但是它卻使開發(fā)人員與Web的本質(zhì)漸行漸遠(yuǎn)。ASP.NET MVC是一種回歸,它使開發(fā)人員可以真正地面向Web進行編程,我們面對的不再是拖拉到Web頁面的控件,而是整個HTTP請求和響應(yīng)的流程。這不是一本ASP.NET MVC入門書籍我個人覺得掌握ASP.NET MVC具有三個層次。了解基本的編程模式,掌握Controller和View的定義方式,知道路由如何注冊,以及驗證規(guī)則如何定義,此為第一層次。第二層次要求我們對ASP.NET MVC框架本身從請求接收到響應(yīng)回復(fù)的整個流程具有一個清晰的認(rèn)識,包括請求如何被路由、目標(biāo)Controller如何被激活、Model元數(shù)據(jù)如何被解析、Action方法如何被執(zhí)行、View如何呈現(xiàn)等。ASP.NET MVC本身是一個極具可擴展的開發(fā)框架,合理利用其擴展性可以解決很多開發(fā)中的實際問題,而掌握ASP.NET MVC的最高層次就是憑著對框架本身的運行機制的了解準(zhǔn)確地找到相應(yīng)的擴展點,并創(chuàng)建相應(yīng)的擴展來解決我們遇到的問題。本書不是一本ASP.NET MVC入門書籍,而是讓處于第一層次的讀者快速進入第二和第三層次的書。這是一本講述ASP.NET MVC框架本質(zhì)的書很多.NET開發(fā)人員都在抱怨微軟開發(fā)技術(shù)過快的更新頻率讓他們無所適從。其實他們看到的只是單純的版本升級而已,一些本質(zhì)的東西一直是“穩(wěn)定”的。微軟推出.NET戰(zhàn)略已經(jīng)十多年了,CLR卻只有四個版本而已。最新版本的ASP.NET雖然表面上已經(jīng)看不到太多最初的影子,但是整個請求處理的管道一直未曾改變。對于一項開發(fā)技術(shù),只要我們了解了它最根本的一些東西,就不應(yīng)該懼怕其高頻率的版本更替,而應(yīng)該熱烈擁抱它。本書力求將關(guān)于ASP.NET MVC框架最根本的東西帶給大家,而不是羅列一些簡單的編程技巧。這是一本實用的書可能有人覺得這本剖析ASP.NET MVC框架運行原理的書沒有什么“實際”的意義,因為我們每天的日常工作就是編程,知道了ASP.NET MVC從請求接收到響應(yīng)回復(fù)之間整個處理流程并不會對我們的工作造成實質(zhì)性的改變。其實這種想法是極端錯誤的,因為我們編寫的程序最終是在ASP.NET MVC框架上運行的,程序的高效性決定于它是否能夠最大限度地“迎合”框架的運行機制,所以了解ASP.NET MVC框架的運行原理有利于我們寫出高質(zhì)量的程序。我個人將基于ASP.NET MVC的編程分為兩類,即“面向業(yè)務(wù)編程“和“面向框架編程”。前者根據(jù)具體的業(yè)務(wù)邏輯定義Controller和設(shè)計View,這是大部分Web開發(fā)人員的主要工作;后者則是為整個Web應(yīng)用搭建一個框架,讓最終的開發(fā)人員只需要關(guān)注具體的業(yè)務(wù)邏輯,而讓框架來完成所有與業(yè)務(wù)無關(guān)的部分。對于后者,我們可以充分利用ASP.NET MVC的擴展性,通過自定義的擴展將非業(yè)務(wù)的功能自動“注入”到業(yè)務(wù)邏輯的處理流程中,這樣不僅可以提高開發(fā)效率,而且還能提高開發(fā)質(zhì)量。本書在剖析ASP.NET MVC框架運行機制過程中幾乎列出了其所有的擴展點,并且通過實例演示的形式提供了很多實用的擴展??梢詫⒈緯暈橐槐尽凹軜?gòu)設(shè)計”的書在我的周圍存在這樣的一些人,他們以剛畢業(yè)一兩年的畢業(yè)生為主,他們大都工作勤奮、聰明好學(xué),手中經(jīng)常捧著GoF的《設(shè)計模式》,總是希望將書中的設(shè)計模式應(yīng)用到具體項目之中,或者希望通過項目的實踐來印證他們在書本上的設(shè)計模式,但是理論和實踐之間的距離總讓他們感到困惑。要從真實的項目或者產(chǎn)品中學(xué)習(xí)“實用”的軟件架構(gòu)設(shè)計知識,先得確定目標(biāo)項目或者產(chǎn)品中采用的架構(gòu)思想和設(shè)計模式是正確的,而我們參與的很多項目其實被“架構(gòu)”得一塌糊涂。對于像ASP.NET這樣的產(chǎn)品,其基礎(chǔ)架構(gòu)能夠在很長一段時間內(nèi)保持不變,本身就證明了應(yīng)用在上面的架構(gòu)設(shè)計的正確性,它們不正是我們學(xué)習(xí)架構(gòu)設(shè)計最好的素材嗎?本書對ASP.NET MVC框架的運行機制進行了深入剖析,實際上是將ASP.NET MVC的整個設(shè)計展示在讀者面前,讀者朋友們也許可以將本書作為一本“架構(gòu)設(shè)計”的書來讀。本書的寫作特點我想本書的讀者可能很多都讀過我的《WCF全面解析》,雖然內(nèi)容不同,本書卻可能看成是它的延續(xù),因為它們基本上采用了相同的寫作手法??偟貋碇v,我基本上采用“原理講述、代碼分析和實例證明”這個模式來介紹某個技術(shù)要點,對于一個具體的知識點,我不僅僅會告訴讀者“是什么”,還會告訴讀者“為什么”,以及“如何證明是這樣”。除此之外,如果某個知識點在真實的項目開發(fā)中具有“實用”價值,我一般會給出一個相關(guān)的實例演示。本書具有一個與其他中文原創(chuàng)或者翻譯書籍截然不同的特點,那就是幾乎所有的術(shù)語都采用英文,比如Controller、Model和View在本書中并沒有翻譯成中文“控制器”、“模型”和“視圖”。因為我認(rèn)為很多術(shù)語其實很難找到一個語義完全等同的中文詞組或短語與之對應(yīng),對于習(xí)慣了英文作為“開發(fā)語言”的讀者來說,強行翻譯其實是不必要的。這不是一本純理論的書,而是一本“實證型”的書,在書中提供了110個可供單獨下載的實例演示。這些實例在本書中具有不同的作用,有的是為了探測和證明對應(yīng)的論點,有的是為了演示某種使用的編程技巧,有的直接就是一個完整的案例。本書讀者我們說《ASP.NET MVC 4框架揭秘》不是一本ASP.NET MVC入門書籍,主要是因為本書在第1章并沒有提供一個“Hello World”實例,關(guān)注重點主要落在ASP.NET MVC框架本身的運行機制上面,但是并不是說本書的讀者需要預(yù)先對ASP.NET MVC具有多深入的認(rèn)識才行。如果讀者對ASP.NET MVC基本的編程模式具有一定的了解,讀懂這本書是完全沒有問題的。對于從未接觸過ASP.NET MVC的.NET開發(fā)人員,可以通過官方網(wǎng)站來學(xué)習(xí)ASP.NET MVC。本書結(jié)構(gòu)第1章 ASP.NET + MVCASP.NET和MVC,分別代表了ASP.NET MVC的技術(shù)平臺和設(shè)計思想。本章對MVC模式及其變體比如MVP和Model 2等作了概括性介紹,同時對ASP.NET的管道式設(shè)計,以及與各種版本的IIS之間的交互機制進行了全面講述。為了讓讀者對ASP.NET MVC框架的運行機制具有一個大概的了解,本章按照其原理創(chuàng)建了一個“迷你版”的ASP.NET MVC。第2章 URL路由ASP.NET MVC借助于URL路由系統(tǒng)實現(xiàn)了URL模式與目標(biāo)Controller和Action的映射,以及內(nèi)嵌于URL的參數(shù)傳遞。基于URL路由的編程主要體現(xiàn)在路由映射的注冊和基于注冊路由的URL生成上面,本章對這兩個方面作了非常詳細(xì)的介紹。URL路由最終是借助于自定義的HttpModule(UrlRoutingModule)實現(xiàn)的,它利用動態(tài)注冊HttpHandler映射的方式提供針對URL路由的實現(xiàn),這是本章著重講述的重點。第3章 Controller的激活本章對以ControllerFactory為核心的Controller激活系統(tǒng),以及通過DefaultControllerFactory提供的Controller默認(rèn)激活機制進行了詳細(xì)介紹。以IoC的方式激活Controller在實際的Web應(yīng)用開發(fā)中具有重要的意義,本章以較多的篇幅講述了如何將不同的IoC框架(Unity和Ninject)應(yīng)用到ASP.NET MVC的Controller激活系統(tǒng)中。具體來說,我們以實例演示的方式講述了三種不同的實現(xiàn)方式,包括自定義ControllerFactory、ControllerActivator和DependencyResolver。第4章 Model元數(shù)據(jù)的解析Model元數(shù)據(jù)是針對數(shù)據(jù)類型的一種描述信息,ASP.NET MVC提供了基于數(shù)據(jù)注解特性的聲明式Model元數(shù)據(jù)定義方式,本章對所有與此相關(guān)的數(shù)據(jù)注解特性,以及它們對Model元數(shù)據(jù)的影響進行了全面的介紹。ASP.NET MVC利用Model元數(shù)據(jù)實現(xiàn)了模板化的HTML生成方式,本章重點講述了如何為具體的數(shù)據(jù)類型定義編輯和顯示模板,以及定義的模板在調(diào)用HtmlHelper/HtmlHelper的模板方法過程中是如何控制最終生成的HTML的。本章的最后關(guān)注于以ModelMetadataProvider為核心的Model元數(shù)據(jù)提供機制,以及如何通過自定義ModelMetadataProvider實現(xiàn)對Model元數(shù)據(jù)提供機制的定制。第5章 Model的綁定ASP.NET MVC的Model綁定旨在為目標(biāo)Action方法提供參數(shù)列表。ParameterDescriptor為Model綁定提供了相關(guān)的元數(shù)據(jù)信息,本章以介紹ParameterDescriptor以及相關(guān)的ControllerDescriptor和ActionDescriptor作為開篇。Model綁定所需的最終數(shù)據(jù)通過ValueProvider來提供,本章接下來會對實現(xiàn)在各種不同ValueProvider中的數(shù)據(jù)值提供機制,以及以ValueProviderFactory為核心的ValueProvider提供機制進行全面而深入的介紹。本章的最后部分著重介紹以ModelBinder為核心的Model綁定系統(tǒng),以及實現(xiàn)在DefaultModelBinder中的默認(rèn)Model綁定機制。第6章 Model的驗證Action方法在執(zhí)行之前需要通過Model驗證機制確保提供參數(shù)的有效性。本章會著重講述以ModelValidator為核心的Model驗證系統(tǒng),以及通過ModelValidatorProvider實現(xiàn)的ModelValidator提供機制。Model驗證是伴隨著Model綁定進行的,具體執(zhí)行流程的介紹也包含在本章之中。ASP.NET MVC利用ValidationAttribute特性為Model驗證提供了一種聲明式編程方式,其背后的實現(xiàn)機制是本章重要講述的內(nèi)容。jQuery驗證框架被默認(rèn)用于客戶端驗證,jQuery驗證的編程方式,以及與ASP.NET MVC驗證系統(tǒng)的協(xié)作方式會在本章的最后一部分予以介紹。第7章 Action的執(zhí)行針對請求的處理最終體現(xiàn)在對目標(biāo)Action方法的執(zhí)行上面。Action方法可以以同步或者異步的方式執(zhí)行,所以本章以介紹兩種不同的異步Action編程模式作為開篇;此外,同步與異步的差異體現(xiàn)在整個請求的處理過程中,MvcHandler、Controller、ActionInvoker、ControllerDescriptor和ActionDescriptor等都具有同步和異步的版本,本章會對它們作一個系統(tǒng)的比較。Action的執(zhí)行還伴隨著篩選器的執(zhí)行,在本章的最后對四種篩選器的作用和執(zhí)行流程進行單獨介紹。第8章 View的呈現(xiàn)ActionResult作為執(zhí)行Action返回的結(jié)果,實現(xiàn)了對請求的最終響應(yīng),本章介紹了所有預(yù)定義的ActionResult分別是如何完成針對請求的響應(yīng)的。作為最重要的ActionResult,ViewResult將整個預(yù)定義的View呈現(xiàn)出來,而它背后是一套完整的View引擎,View引擎的運行機制,以及與ViewResult的協(xié)作方式是本章介紹的一個重點。ASP.NET MVC默認(rèn)提供了ASPX和Razor這兩種原生View引擎的支持,針對Razor引擎的深入剖析被放在本章的最后一部分。第9章 ASP.NET Web APIASP.NET Web API使我們可以很容易地定義REST服務(wù),本章會提供Web API基本編程模式的介紹。ASP.NET Web API采用了與ASP.NET MVC獨立但類似的執(zhí)行管道,對整個管道從請求接收到響應(yīng)回復(fù)的整個流程的介紹是本章的重點,包括HttpController的激活與執(zhí)行、Action的選擇、Model元數(shù)據(jù)的解析、Action參數(shù)的綁定與執(zhí)行等。第10章 案例實踐本章提供了一個名為Video Mall(簡稱VM)的在線電子商務(wù)購物網(wǎng)站來模擬ASP.NET MVC在真實項目中的應(yīng)用。VM以SQL Server作為數(shù)據(jù)存儲,并采用Entity Framework作為ORM框架進行數(shù)據(jù)存取。VM利用了在前面章節(jié)中定義的一系列擴展,同時還涉及了一些架構(gòu)思想和涉及模式,比如模塊化設(shè)計、IoC、AOP以及Repository等。關(guān)于作者蔣金楠(網(wǎng)名Artech)現(xiàn)就職于某知名軟件公司擔(dān)任高級軟件顧問。連續(xù)5屆微軟MVP(最有價值專家),同時也是少數(shù)的雙料MVP(Solutions Architecture + Connected System)之一。國內(nèi)較早接觸WCF的人之一,2007年2月起在個人博客上發(fā)表超過兩百篇深入介紹WCF的文章,成為了目前國內(nèi)WCF在線資料的主要來源。致謝本書得以出版,需要感謝本書的編輯張春雨先生和葛娜小姐,你們的專業(yè)水準(zhǔn)和責(zé)任心是為本書提供的質(zhì)量保證,期待著與你們第三度合作的機會。此外,最需要感謝的是我的老婆徐妍妍,只有我知道你在本書提交給出版社之前所作的校對工作有多么重要。本書支持本書針對最新版本的ASP.NET MVC,同時涉及太多底層實現(xiàn)的內(nèi)容,所以大部分內(nèi)容是找不到任何現(xiàn)成參考資料的,這些內(nèi)容大都來自于作者對源碼的分析和試驗的證明。本書的最初版本是根據(jù)ASP.NET MVC 4 Beta撰寫的,差不多快寫完的時候微軟發(fā)布了ASP.NET MVC 4 RC,然后我根據(jù)RC對原來的內(nèi)容作了不小的改動。在ASP.NET MVC4正式推出之后,我第一時間聯(lián)系到了Scott Guthrie,從他們團隊得到了一份正式版與RC之間變化的列表,并據(jù)此又作了一些修改。這些因素加上我本人能力的限制,都可能造成一些無法避免的錯誤或者偏差,如果讀者在閱讀過程中發(fā)現(xiàn)了任何問題,希望能夠反饋給我。如果讀者遇到任何ASP.NET MVC或者是WCF的問題,也歡迎與我通過以下的方式進行交流。
內(nèi)容概要
針對最新版本的ASP.NET MVC
4,深入剖析底層框架從請求接收到響應(yīng)回復(fù)的整個處理流程(包括URL路由、Controller的激活、Model元數(shù)據(jù)的解析、Model的綁定、Model的驗證、Action的執(zhí)行、View的呈現(xiàn)和ASP.NET
Web API等),并在此基礎(chǔ)上指導(dǎo)讀者如何通過對ASP.NET MVC框架本身的擴展解決應(yīng)用開發(fā)中的實際問題。
作者簡介
蔣金楠,網(wǎng)名Artech,高級軟件顧問。微軟6任MVP(Solutions Architecture、Connected
System與Microsoft Integration)。著《WCF全面解析》(上、下冊)、《ASP.NET MVC
4框架揭秘》等。對.NET Framework、C#、ASP.NET、SQL
Server、設(shè)計模式、軟件架構(gòu),以及主流的開源框架有著深入的研究。尤其是在WCF技術(shù)方面,屬國內(nèi)較早接觸WCF的人之一,同時對.NET
Remoting、MSMQ通信技術(shù)有深入的理解。博客園推薦博客(目前排名第一),2012年度51CTO
IT博客大賽10佳。
書籍目錄
第1章 ASP.NET +
MVC
1.1 傳統(tǒng)MVC模式
1.1.1 自治視圖
1.1.2 什么是MVC模式
1.2 MVC的變體
1.2.1 MVP
1.2.2 Model
2
1.2.3 ASP.NETMVC與Model 2
1.3 IIS/ASP.NET管道
1.3.1 IIS
5.x與ASP.NET
1.3.2 IIS
6.0與ASP.NET
1.3.3 IIS
7.0與ASP.NET
1.3.4 ASP.NET管道
1.4 ASP.NET
MVC是如何運行的
1.4.1 建立在“迷你版”ASP.NET
MVC上的Web應(yīng)用
1.4.2 URL路由
1.4.3
Controller的激活
1.4.4 Action的執(zhí)行
本章小結(jié)
第2章 URL路由
2.1 ASP.NET路由系統(tǒng)
2.1.1 請求URL與物理文件的分離
2.1.2
實例演示:通過URL路由實現(xiàn)請求地址與.aspx頁面的映射(S201)
2.1.3 Route與RouteTable
2.1.4 路由映射
2.1.5 根據(jù)路由規(guī)則生成URL
2.2 ASP.NET
MVC擴展
2.2.1 路由映射
2.2.2
實例演示:注冊路由映射與查看路由信息(S208)
2.2.3 缺省URL參數(shù)
2.2.4 基于Area的路由映射
2.2.5 鏈接和URL的生成
2.3 動態(tài)HttpHandler映射
2.3.1
UrlRoutingModule
2.3.2 PageRouteHandler與MvcRouteHandler
2.3.3
ASP.NET路由系統(tǒng)擴展
本章小結(jié)
第3章 Controller的激活
3.1 總體設(shè)計
3.1.1 Controller
3.1.2
ControllerFactory
3.1.3
ControllerBuilder
3.1.4 Controller的激活與URL路由
3.2 默認(rèn)實現(xiàn)
3.2.1
Controller類型的解析
3.2.2
Controller類型的緩存
3.2.3
Controller的釋放和會話狀態(tài)行為的控制
3.3 IoC的應(yīng)用
3.3.1 從Unity來認(rèn)識IoC
3.3.2
Controller與Model的分離
3.3.3 基于IoC的ControllerFactory
3.3.4 基于IoC的ControllerActivator
3.3.5
基于IoC的DependencyResolver
本章小結(jié)
第4章 Model元數(shù)據(jù)的解析
4.1
Model元數(shù)據(jù)及其定制
4.1.1 Model元數(shù)據(jù)層次化結(jié)構(gòu)
4.1.2 基本Model元數(shù)據(jù)信息
4.1.3 Model元數(shù)據(jù)的定制
4.1.4
IMetadataAware接口
4.2
Model元數(shù)據(jù)與Model模板
4.2.1
實例演示:通過模板將布爾值顯示為RadioButton(S409)
4.2.2
預(yù)定義模板
4.2.3
DataTypeName與模板名稱
4.2.4 模板的獲取與執(zhí)行
4.2.5 實例演示:通過定制Model元數(shù)據(jù)和自定義模板
實現(xiàn)預(yù)定義列表的呈現(xiàn)(S412)
4.3 Model元數(shù)據(jù)的提供機制
4.3.1
再談ModelMetadata
4.3.2 ModelMetadataProvider
4.3.3 Model元數(shù)據(jù)提供系統(tǒng)的擴展
本章小結(jié)
第5章 Model的綁定
5.1
ControllerDescriptor、ActionDescriptor與ParameterDescriptor
5.1.1 ControllerDescriptor
5.1.2
ActionDescriptor
5.1.3 ParameterDescriptor
5.2 ValueProvider
5.2.1 NameValueCollectionValueProvider
5.2.2
DictionaryValueProvider
5.2.3 ValueProviderFactory
5.2.4
ValueProviderFactories
5.3 ModelBinder
5.3.1
ModelBinder與ModelBinderProvider
5.3.2
ModelState與Model綁定
5.3.3 ModelBindingContext的創(chuàng)建
5.4
Model綁定的默認(rèn)實現(xiàn)
5.4.1 簡單類型
5.4.2 復(fù)雜類型
5.4.3 數(shù)組
5.4.4 集合
5.4.5 字典
本章小結(jié)
第6章 Model的驗證
6.1 ModelValidator與ModelValidatorProvider
6.1.1 ModelValidator
6.1.2
ModelValidatorProvider
6.1.3 ModelValidatorProviders
6.2
Model綁定與驗證
6.2.1 ModelState
6.2.2
驗證消息的呈現(xiàn)
6.2.3 Model綁定中的驗證
6.3
基于數(shù)據(jù)注解特性的Model驗證
6.3.1 ValidationAttribute特性
6.3.2
DataAnnotationsModelValidator
6.3.3 DataAnnotationsModelValidatorProvider
6.3.4
將ValidationAttribute應(yīng)用到參數(shù)上
6.3.5 一種Model類型,多種驗證規(guī)則
6.4 客戶端驗證
6.4.1
jQuery驗證
6.4.2
基于jQuery的Model驗證
6.4.3
自定義驗證
本章小結(jié)
第7章 Action的執(zhí)行
7.1
異步Action的定義
7.1.1 基于線程池的請求處理機制
7.1.2 兩種異步Action方法的定義
7.1.3 AsyncManager
7.2
Action方法的執(zhí)行
7.2.1
MvcHandler對請求的處理
7.2.2
Controller的執(zhí)行
7.2.3 ActionInvoker的執(zhí)行
7.2.4 ControllerDescriptor的同步與異步
7.2.5 ActionDescriptor的執(zhí)行
7.3 篩選器的執(zhí)行
7.3.1 Filter及其提供機制
7.3.2
AuthorizationFilter
7.3.3 ActionFilter
7.3.4 ExceptionFilter
7.3.5 實例演示:集成EntLib實現(xiàn)自動化異常處理(S713, S714,
S715)
7.3.6 ResultFilter
本章小結(jié)
第8章 View的呈現(xiàn)
8.1 ActionResult
8.1.1
EmptyResult
8.1.2 ContentResult
8.1.3 FileResult
8.1.4 JavaScriptResult
8.1.5 JsonResult
8.1.6
HttpStatusCodeResult
8.1.7
RedirectResult/RedirectToRouteResult
8.2 ViewResult與ViewEngine
8.2.1 View引擎中的View
8.2.2 ViewEngine
8.2.3 ViewResult的執(zhí)行
8.3 Razor引擎
8.3.1
View的編譯原理
8.3.2
WebViewPage與WebViewPage
8.3.3 RazorView
8.3.4
RazorViewEngine
本章小結(jié)
第9章 ASP.NET Web API
9.1 Web、REST與Web API
9.1.1 Web如此簡單
9.1.2
REST是什么
9.1.3 ASP.NET Web
API
9.2 服務(wù)端管道
9.2.1 ASP.NET Web API管道式設(shè)計
9.2.2 HttpMessageHandler
9.2.3 HttpServer
9.2.4
實例演示:自定義HttpMessageHandler實現(xiàn)HTTP方法重寫(S903)
9.3
HttpControllerDispatcher
9.3.1
HttpController的激活
9.3.2
HttpController的執(zhí)行
9.3.3 Action的選擇
9.3.4 Model元數(shù)據(jù)的解析
9.3.5 Action參數(shù)綁定
9.3.6 Model驗證
9.3.7 Action的執(zhí)行與結(jié)果的響應(yīng)
9.4 Web API的調(diào)用和自我寄宿
9.4.1 HttpClient
9.4.2 HttpSelfHostServer
章節(jié)摘錄
版權(quán)頁: 插圖: ASP.NET集成 從上面對IIS 5.x和IIS 6.0的介紹中,我們不難發(fā)現(xiàn)IIS與ASENET是兩個相互獨立的管道(Pipeline)。在各自管轄范圍內(nèi),它們各自具有自己的一套機制對HTTP請求進行處理。 兩個管道通過ISAPI實現(xiàn)“連通”,IIS是第一道屏障,當(dāng)對HTTP請求進行必要的前期處理(比如身份驗證等)后,通過ISAPI將請求分發(fā)給ASENET管道。當(dāng)ASENET在自身管道范圍內(nèi)完成對HTTP請求的處理時,處理后的結(jié)果再返回到IIS,IIS對其進行后期處理(比如日志記錄、壓縮等),最終生成HTTP響應(yīng)。圖1—9反映了IIS 6.0與ASENET之間的橋接關(guān)系。 從另一個角度講,IIS運行在非托管的環(huán)境中,而ASENET管道則是托管的,ISAPI還是連接非托管環(huán)境和托管環(huán)境的紐帶。IIS 5.x和IIS 6.0把兩個管道進行隔離至少帶來了下面的一些局限與不足。 相同操作的重復(fù)執(zhí)行:IIS與ASP.NET之間具有一些重復(fù)的操作,比如身份驗證。 動態(tài)文件與靜態(tài)文件處理的不一致:因為只有基于ASP.NET動態(tài)文件(比如.aspx、.asmx、.svc等)的HTTP請求才能通過ASENET ISAPI進入ASP.NET管道,而對于一些靜態(tài)文件(比如.html、.xml、.img等)的請求則由IIS直接響應(yīng),那么ASP.ENET管道中的一些功能將不能用于這些基于靜態(tài)文件的請求,比如我們希望通過Foms認(rèn)證應(yīng)用于基于圖片文件的請求就做不到。 IIS難以擴展:對于IIS的擴展基本上就體現(xiàn)在自定義ISAPI,但是對于大部分人來說,這不是一件容易的事情。因為ISAPI是基于Win32的非托管的API,并非一種面向應(yīng)用的編程接口。通常我們希望的是諸如定義ASP.NET的HttpModule和HttpHandler一樣,通過托管代碼的方式來擴展IIS。
編輯推薦
《ASP.NET MVC4框架揭秘》是讓處于ASP.NETMVC第一層次的讀者快速進入第二和第三層次的書。ASP.NET MVC功能強大,它提供了一種全新的編程方式,使我們可以將MVC模式很自然地融入動態(tài)網(wǎng)站的開發(fā)之中。由它帶來的對關(guān)注點清晰分離和對HTML的細(xì)粒度控制使我們真正體會到了敏捷開發(fā)的樂趣。借助于ASP.NET MVc提供的眾多特性,不但可以使我們在復(fù)雜應(yīng)用中靈活地采用TDD(測試驅(qū)動開發(fā))的夢想變成現(xiàn)實,還能讓我們的應(yīng)用盡可能地?fù)肀ё钚碌腤eb標(biāo)準(zhǔn)。
圖書封面
圖書標(biāo)簽Tags
無
評論、評分、閱讀與下載