日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
ASP.NETMVC執(zhí)行異步Action

ASP.NET MVC檢查是否為異步Action

創(chuàng)新互聯(lián)長期為上千客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為隆昌企業(yè)提供專業(yè)的成都網(wǎng)站制作、成都網(wǎng)站建設(shè),隆昌網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。

我們已經(jīng)形成了一個約定:如果要執(zhí)行一個異步Action,那么控制器對象必須為Controller類型。這個約定的目的是為了使用Controller類中包含的IActionInvoker——確切地說,是ControllerActionInvoker類型里的功能。因此,另一個約定便是Controller的ActionInvoker對象必須返回一個ControllerActionInvoker的實例。

ControllerActionInvoker中有一些輔助方法,能夠返回對于一個Controller或Action的描述對象。從一個Action描述對象中我們可以獲取關(guān)于這個Action的各種信息,而它是否被標記了AsyncActionAttribute,就是我們判斷這個Action是否應(yīng)該被異步執(zhí)行的依據(jù)。如下:

 
 
 
  1. publicclassSyncMvcHandler:IHttpHandler,IRequiresSessionState  
  2. {  
  3. publicSyncMvcHandler(  
  4. IControllercontroller,  
  5. IControllerFactorycontrollerFactory,  
  6. RequestContextrequestContext)  
  7. {  
  8. this.Controller=controller;  
  9. this.ControllerFactory=controllerFactory;  
  10. this.RequestContext=requestContext;  
  11. }  
  12.  
  13. publicIControllerController{get;privateset;}  
  14. publicRequestContextRequestContext{get;privateset;}  
  15. publicIControllerFactoryControllerFactory{get;privateset;}  
  16.  
  17. publicvirtualboolIsReusable{get{returnfalse;}}  
  18.  
  19. publicvirtualvoidProcessRequest(HttpContextcontext)  
  20. {  
  21. try  
  22. {  
  23. this.Controller.Execute(this.RequestContext);  
  24. }  
  25. finally  
  26. {  
  27. this.ControllerFactory.ReleaseController(this.Controller);  
  28. }  
  29. }  

ControllerActionInvoker類型中有個protected方法GetControllerDescriptor,它接受一個ControllerContext類型的參數(shù),并返回一個ControllerDescriptor對象來描述當前控制器,而從該描述對象中可以通過FindAction方法獲得一個ActionDescriptor對象來描述即將執(zhí)行的Action。如果是一個不存在的Action,那么就返回false,最后就通過SyncMvcHandler對象來執(zhí)行默認的行為。當且僅當該Action上擁有AsyncActionAttribute 標記時,才說明它應(yīng)該被異步執(zhí)行,返回true。此外,這段代碼中用到了MethodInvoker,這是一個輔助類,它來源于Fast Reflection Library,它實現(xiàn)了反射調(diào)用功能,但是它的性能十分接近于方法的直接調(diào)用,我在這篇文章中詳細描述了這個項目的功能和使用。

這段代碼便涉及到ASP.NET MVC RC版本在Beta版本基礎(chǔ)上的改進。在原先的ControllerActionInvoker類中只有獲取Action方法的MethodInfo,而沒有RC中各描述對象這樣的抽象類型。從目前的設(shè)計上來看,我們使用的都是基于反射的抽象描述類型的子類。例如默認情況下,我們通過ActionDescriptor抽象類型訪問的實際上是ReflectedActionDescriptor類型的實例。這是一個很有用的改進,由于我們通過描述對象進行抽象,于是我們就可以:

使用不同的實現(xiàn)方式來描述各對象,默認情況下是使用基于反射(也就是“約定”)的實現(xiàn),如果需要的話我們也可以使用基于配置文件的方式替換現(xiàn)有實現(xiàn)。

使用特定對象的描述方式可以不拘泥于內(nèi)部細節(jié),例如一個異步Action可能就由兩個方法組成。
有了特定的描述對象,也方便添加額外的屬性,例如該Action是否應(yīng)該異步執(zhí)行,是否應(yīng)該禁用Session State等等。以上介紹ASP.NET MVC執(zhí)行異步Action

【編輯推薦】

  1. 介紹ASP.NET 2.0虛擬主機
  2. 淺談ASP.NET應(yīng)用程序
  3. 優(yōu)化ASP.NET 2.0 Profile Provider
  4. 淺談ASP.NET管道優(yōu)化
  5. 介紹ASP.NET Routing引擎

當前文章:ASP.NETMVC執(zhí)行異步Action
URL分享:http://m.5511xx.com/article/dpsocdo.html