成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

概述ASP.NET MVC框架

開發(fā) 后端
本文簡(jiǎn)單介紹發(fā)現(xiàn)ASP.NET MVC RC在框架設(shè)計(jì)上進(jìn)行了較大的改進(jìn),這使得我在構(gòu)建擴(kuò)展時(shí)的策略發(fā)生了些許變化。

異步請(qǐng)求處理是ASP.NET 2.0中引入的高級(jí)特性,它依托IO Complete Port,對(duì)于提高IO密集型應(yīng)用程序的吞吐量非常重要(詳見原理描述和性能測(cè)試)。但是目前ASP.NET MVC框架缺少異步Action功能,這也就是老趙經(jīng)常掛在嘴邊的那個(gè)“目前ASP.NET MVC所缺少的非常重要的功能”。在TechED 2008 China的Session中我曾經(jīng)給出過(guò)一個(gè)所謂的“解決方案”,但是它復(fù)雜性之高使那個(gè)解決方案有太多限制。

為了彌補(bǔ)TechED上的遺憾,以及準(zhǔn)備.NET開發(fā)大會(huì)上的ASP.NET MVC***實(shí)踐的Session,我在春節(jié)休假期間仔細(xì)思考了一下這方面的問(wèn)題,得出了一個(gè)相對(duì)不錯(cuò)的擴(kuò)展:完整,方便,并且非常輕巧——核心邏輯代碼只有200行左右,這意味著絕大部分功能將會(huì)委托給框架中現(xiàn)成的內(nèi)容,確保了擴(kuò)展的穩(wěn)定,高效并且擁有較好的向后兼容性。

值得一提的是,我在1/26號(hào)便基于ASP.NET MVC的Beta版本寫出了這個(gè)擴(kuò)展的***個(gè)版本,而在不久之后微軟發(fā)布了ASP.NET MVC RC。我在移植解決方案的過(guò)程中發(fā)現(xiàn)ASP.NET MVC RC在框架設(shè)計(jì)上進(jìn)行了較大的改進(jìn),這使得我在構(gòu)建擴(kuò)展時(shí)的策略發(fā)生了些許變化。令人欣喜的是,RC版本的這些變化對(duì)于構(gòu)建一個(gè)擴(kuò)展,尤其是現(xiàn)在這種“低端”級(jí)別的擴(kuò)展變得更加容易。ASP.NET MVC框架實(shí)現(xiàn)了它“到處可擴(kuò)展”的承諾。

那么我們現(xiàn)在就來(lái)詳細(xì)分析一下這個(gè)擴(kuò)展的實(shí)現(xiàn)方式。

請(qǐng)求處理方式的改變

在制定基本改造策略之前,我們需要了解ASP.NET MVC框架目前的架構(gòu)及請(qǐng)求處理流程。如下:

在應(yīng)用程序啟動(dòng)時(shí)(此時(shí)還沒有接受任何請(qǐng)求),將針對(duì)MVC請(qǐng)求的Route策略注冊(cè)至ASP.NET Routing模塊。此時(shí)每個(gè)Route策略(即Route對(duì)象)中的RouteHandler屬性為ASP.NET MVC框架中的MvcRouteHandler。

當(dāng)ASP.NET Routing模塊接收到一個(gè)匹配某個(gè)Route策略的HTTP請(qǐng)求時(shí),將會(huì)調(diào)用該Route對(duì)象中RouteHandler對(duì)象的GetHttpHandler以獲取一個(gè)HttpHandler,并交由ASP.NET執(zhí)行。MvcRouteHandler永遠(yuǎn)將返回一個(gè)MvcHandler對(duì)象。

MvcHandler在執(zhí)行時(shí),將取出RouteData中的controller值,并以此構(gòu)建一個(gè)實(shí)現(xiàn)了IController接口的控制器對(duì)象,并調(diào)用IController接口的Execute方法執(zhí)行該控制器。

對(duì)于一個(gè)ASP.NET MVC應(yīng)用程序來(lái)說(shuō),大部分控制器將會(huì)繼承System.Web.Mvc.Controller類型。Controller類將會(huì)從RouteData獲取action值,并交給實(shí)現(xiàn)IActionInvoker接口的對(duì)象來(lái)執(zhí)行一個(gè)Action。
……

如果我們要將這個(gè)流程改造成異步處理,那么就要讓它符合ASP.NET架構(gòu)中的異步處理方式。ASP.NET架構(gòu)對(duì)于異步請(qǐng)求的處理可以體現(xiàn)在好幾種方式上,例如異步頁(yè)面,異步Http Module等,而最適合目前場(chǎng)合的做法自然是異步Http Handler。為實(shí)現(xiàn)一個(gè)異步Handler,我們需要讓處理請(qǐng)求的Handler實(shí)現(xiàn)IHttpAsyncHandler接口,而不是傳統(tǒng)的 IHttpHandler接口。IHttpAsyncHandler接口中的BeginProcessRequest和 EndProcessRequest兩個(gè)方法構(gòu)成了.NET中的APM(Aynchronous Programming Model,異步編程模型)模式,可以使用“二段式”的異步調(diào)用來(lái)處理一個(gè)HTTP請(qǐng)求。

您應(yīng)該已經(jīng)發(fā)現(xiàn),如果我們要支持異步Action,就必須根據(jù)當(dāng)前的請(qǐng)求信息來(lái)確認(rèn)究竟是執(zhí)行一個(gè)IHttpHandler對(duì)象還是IHttpAsyncHandler對(duì)象。而在ASP.NET MVC框架在默認(rèn)情況下是在Http Handler(即MvcHandler對(duì)象)內(nèi)部進(jìn)行控制器的檢查,構(gòu)造和調(diào)用。這為時(shí)已晚,我們必須講這些邏輯提前到Routing過(guò)程中才行。幸運(yùn)的是,ASP.NET Routing所支持的IRouteHandler就像是ASP.NET中的IHttpHandlerFactory,可以根據(jù)情況生成不同的Handler來(lái)執(zhí)行。因此,我們只要構(gòu)建一個(gè)新的IRouteHandler類型即可。于是就誕生了AsyncMvcRouteHandler——可以想象的出,其中的部分代碼與框架中的MvcHandler相同,因?yàn)樵谝欢ǔ潭壬衔覀兊拇_只是把原本在MvcHandler里做的事情給提前了:

 

  1. publicclassAsyncMvcRouteHandler:IRouteHandler  
  2. {  
  3. publicIHttpHandlerGetHttpHandler(RequestContextrequestContext)  
  4. {  
  5. stringcontrollerName=requestContext.RouteData.GetRequiredString("controller");  
  6.  
  7. varfactory=ControllerBuilder.Current.GetControllerFactory();  
  8. varcontroller=factory.CreateController(requestContext,controllerName);  
  9. if(controller==null)  
  10. {  
  11. thrownewInvalidOperationException(...);  
  12. }  
  13.  
  14. varcoreController=controllerasController;  
  15. if(coreController==null)  
  16. {  
  17. returnnewSyncMvcHandler(controller,factory,requestContext);  
  18. }  
  19. else  
  20. {  
  21.  
  22. stringactionName=requestContext.RouteData.GetRequiredString("action");  
  23. returnIsAsyncAction(coreController,actionName,requestContext)?  
  24. (IHttpHandler)newAsyncMvcHandler(coreController,factory,requestContext):  
  25. (IHttpHandler)newSyncMvcHandler(controller,factory,requestContext);  
  26. }  
  27. }  
  28.  
  29. internalstaticboolIsAsyncAction(  
  30. Controllercontroller,stringactionName,RequestContextrequestContext)  
  31. {  
  32. ...  
  33. }  

【編輯推薦】

  1. 介紹ASP.NET 2.0虛擬主機(jī)
  2. 淺談ASP.NET應(yīng)用程序
  3. 優(yōu)化ASP.NET 2.0 Profile Provider
  4. 淺談ASP.NET管道優(yōu)化
  5. 介紹ASP.NET Routing引擎
責(zé)任編輯:佚名 來(lái)源: IT168
相關(guān)推薦

2009-07-20 15:51:40

FubuMVC核心框架ASP.NET MVC

2009-07-24 13:20:44

MVC框架ASP.NET

2009-07-22 13:24:24

ASP.NET MVC

2009-07-20 10:53:59

ASP.NET MVC

2009-07-22 15:58:52

ASP.NET AJA

2009-07-23 10:52:38

2009-07-22 10:34:37

ActionInvokASP.NET MVC

2009-07-22 13:08:55

拯救UpdatePanASP.NET MVC

2009-07-28 17:17:19

ASP.NET概述

2010-06-23 15:44:03

ASP.NET MVC

2009-07-22 17:45:35

ASP.NET教程

2014-06-30 09:22:38

ASP.NETBootstrap

2009-03-13 10:58:48

ASP.NetMVC框架編程

2009-07-27 15:52:21

ASP.NET特點(diǎn)ASP.NET概述

2009-07-29 13:04:59

2009-07-31 12:43:59

ASP.NET MVC

2009-07-20 12:59:53

ASP.NET MVCASP.NET框架的功

2009-07-22 16:17:39

ASP.NET AJA

2009-07-23 16:55:55

ASP.NET特點(diǎn)

2009-08-05 13:58:26

ASP.NET Mem
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美日韩a | 中文区中文字幕免费看 | 97精品久久 | 欧美日韩1区2区3区 欧美久久一区 | 国产日韩精品在线 | 狠狠操天天操 | 欧美中文字幕 | 五月免费视频 | 国产精品99久久久久 | 91av大全| 日本一区二区三区视频在线 | 国产一级黄色网 | h片在线免费看 | 91精品国产乱码久久久久久 | 一级黄色播放 | 嫩草视频在线看 | 国产一区二区精品在线 | 成人激情视频在线 | 亚洲三区在线观看 | 欧美成视频在线观看 | 欧美视频在线播放 | 九九九国产 | 日韩精品一| 在线一区二区三区 | 久久99视频免费观看 | www.精品国产 | 欧美国产日韩在线 | 精品视频在线观看 | 丁香婷婷久久久综合精品国产 | аⅴ资源新版在线天堂 | 欧美久久一区 | 日韩av一区二区在线 | 日韩精品一区二区三区视频播放 | 99热热 | 亚洲一区二区三区四区五区午夜 | 中文字幕高清在线 | 草草影院ccyy| 伊人看片 | 天天躁日日躁狠狠很躁 | 色约约视频 | 亚洲 欧美 综合 |