程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 為ASP.NET MVC擴展異步Action功能

為ASP.NET MVC擴展異步Action功能

編輯:關於ASP.NET

異步請求處理是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 。

……

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved