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

概述ASP.NET MVC框架

開發 后端
本文簡單介紹發現ASP.NET MVC RC在框架設計上進行了較大的改進,這使得我在構建擴展時的策略發生了些許變化。

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

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

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

那么我們現在就來詳細分析一下這個擴展的實現方式。

請求處理方式的改變

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

在應用程序啟動時(此時還沒有接受任何請求),將針對MVC請求的Route策略注冊至ASP.NET Routing模塊。此時每個Route策略(即Route對象)中的RouteHandler屬性為ASP.NET MVC框架中的MvcRouteHandler。

當ASP.NET Routing模塊接收到一個匹配某個Route策略的HTTP請求時,將會調用該Route對象中RouteHandler對象的GetHttpHandler以獲取一個HttpHandler,并交由ASP.NET執行。MvcRouteHandler永遠將返回一個MvcHandler對象。

MvcHandler在執行時,將取出RouteData中的controller值,并以此構建一個實現了IController接口的控制器對象,并調用IController接口的Execute方法執行該控制器。

對于一個ASP.NET MVC應用程序來說,大部分控制器將會繼承System.Web.Mvc.Controller類型。Controller類將會從RouteData獲取action值,并交給實現IActionInvoker接口的對象來執行一個Action。
……

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

您應該已經發現,如果我們要支持異步Action,就必須根據當前的請求信息來確認究竟是執行一個IHttpHandler對象還是IHttpAsyncHandler對象。而在ASP.NET MVC框架在默認情況下是在Http Handler(即MvcHandler對象)內部進行控制器的檢查,構造和調用。這為時已晚,我們必須講這些邏輯提前到Routing過程中才行。幸運的是,ASP.NET Routing所支持的IRouteHandler就像是ASP.NET中的IHttpHandlerFactory,可以根據情況生成不同的Handler來執行。因此,我們只要構建一個新的IRouteHandler類型即可。于是就誕生了AsyncMvcRouteHandler——可以想象的出,其中的部分代碼與框架中的MvcHandler相同,因為在一定程度上我們的確只是把原本在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虛擬主機
  2. 淺談ASP.NET應用程序
  3. 優化ASP.NET 2.0 Profile Provider
  4. 淺談ASP.NET管道優化
  5. 介紹ASP.NET Routing引擎
責任編輯:佚名 來源: IT168
相關推薦

2009-07-20 15:51:40

FubuMVC核心框架ASP.NET MVC

2009-07-24 13:20:44

MVC框架ASP.NET

2009-07-22 15:58:52

ASP.NET AJA

2009-07-23 10:52:38

2009-07-22 13:24:24

ASP.NET MVC

2009-07-20 10:53:59

ASP.NET MVC

2009-07-22 10:34:37

ActionInvokASP.NET MVC

2009-07-22 13:08:55

拯救UpdatePanASP.NET MVC

2010-06-23 15:44:03

ASP.NET MVC

2009-07-28 17:17:19

ASP.NET概述

2009-07-22 17:45:35

ASP.NET教程

2009-03-13 10:58:48

ASP.NetMVC框架編程

2014-06-30 09:22:38

ASP.NETBootstrap

2009-07-27 15:52:21

ASP.NET特點ASP.NET概述

2009-07-29 13:04:59

2009-07-22 16:17:39

ASP.NET AJA

2009-07-23 16:55:55

ASP.NET特點

2009-08-05 13:58:26

ASP.NET Mem

2009-07-31 12:43:59

ASP.NET MVC

2009-07-20 12:59:53

ASP.NET MVCASP.NET框架的功
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久国产精品久久 | 成人a在线 | 免费久草| 国产精品久久久久一区二区三区 | 91在线精品秘密一区二区 | 在线中文av| 日本三级做a全过程在线观看 | 伊人网影院 | 成人国产精品一级毛片视频毛片 | 欧美日韩精品中文字幕 | 国产精品资源在线观看 | 亚洲在线一区二区 | 91原创视频 | www.久| 91麻豆精品国产91久久久更新资源速度超快 | 亚洲一区二区精品视频 | 久久99深爱久久99精品 | 91免费观看视频 | 伊人久久综合 | 国产成人福利在线观看 | 逼逼视频 | 国产精品久久久久久久久久三级 | 午夜不卡一区二区 | 日韩毛片免费看 | 亚洲国产一区二区三区, | 亚洲网站在线播放 | 国产精品亚洲一区二区三区在线观看 | 日日操视频| 中文av电影 | 毛片一区二区三区 | 久久精品一区 | 亚洲资源在线 | 国产亚洲精品久久19p | 毛片大全 | 成人免费视频在线观看 | 国产免费一区 | 97起碰| 国产免费一区二区三区 | 久久久久久久久久毛片 | 久草在线在线精品观看 | 自拍偷拍精品 |