为ASP.NET MVC扩展异步Action功能

异步请求处理是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 。

……

时间: 2024-11-05 05:20:40

为ASP.NET MVC扩展异步Action功能的相关文章

返璞归真 asp.net mvc (3) - Controller/Action

原文:返璞归真 asp.net mvc (3) - Controller/Action[索引页][源码下载] 返璞归真 asp.net mvc (3) - Controller/Action 作者:webabcd 介绍 asp.net mvc 之 Controller 和 Action Controller 类必须以字符串 "Controller" 做类名称的结尾,字符串 Controller 之前的字符串为 Controller 的名称,类中的方法名为 Action 的名称 Acti

Asp.net mvc 2 in action 笔记-1 概述、Model

受Rails成功的影响,很多的开发框架都加入了rails成功的MVC思想,如.net世界的Castle Subsonic等,微软发布的框架Asp.net MVC作为后来者,吸取了很多好的思想,而且作为微软的官方支持,代码开源,因此估计asp.net的Web开发世界这个会成为主流. 本系列是看的图书<Asp.net mvc 2 in action>的一个笔记整理 约定 ■ Content-类似CSS 和图片的静态文件 ■ Controllers-控制器类 ■ Models-模型类 ■ Scrip

使用ASP.NET MVC 4 Async Action+jQuery实现消息通知机制的实现代码_实用技巧

这两天在使用Asp.net MVC 4开发COMET消息通知机制,在后端使用异步线程对消息进行订阅,客户端通过AJAX长连接请求MVC中的ACTION,如:http://localhost/event/imageSet,即表示获取ImageSet对象的变更消息(新增,更新和删除消息). 1.事件消息的类IEventEntity<TEntity>类的定义 复制代码 代码如下: public interface IEntityEvent<TEntity>    {        //变

Asp.net mvc 2 in action笔记 -5 MvcContrib 测试和其他

MvcContrib 第5章 MvcContrib Grid 和带进度的文件上载的使用 MVcContrib是社区开源的asp.net mvc增强和扩展库,如其中的Grid,即可高效的进行设计又可灵活的控制表格的布局[比Web Form 的GridView简化了不少] 在Codeplex.com上可以找到该项目,上面有文档,特别对于Grid有详细的例子参考,如下图 例子在MVCContrib.Extras.release.zip中 以下是帮助[在MVCContrib.release.zip中]

学习ASP.NET MVC(三) Controller/Action 深入解析与应用实例

一.摘要 一个Url请求经过了Routing处理后会调用Controller的Action方法. 中间的过程是怎样的? Action方 法中返回ActionResult对象后,如何到达View的? 本文将讲解Controller的基本用法, 深入分析 Controller的运行机制, 并且提供了创建所有类型Action的代码. 值得学习ASP.NET MVC时参考. 二.承上启下 在上一篇文章中, 我已经学会了如何使用Routing获取Controller和Action, 随后的程序会调用 Co

ASP.NET MVC笔记之Action过滤器

Action 过滤器在代码中体现为添加到Action上方的属性,MVC框架包含了一些过滤器,如: OutputCache –指示Controller在指定时间内缓存返回的结果. HandleError –处理Contrller中Action抛出的异常 Authorize – 约束特定用户或角色对Action的访问 另外你还可以自己定义过滤器,比如:你想使用自定义的验证机制:你想修改Action返回的数据等等 . 使用Action 过滤器 Action 过滤器不仅可以控制单个Action,也可以控

ASP.NET MVC笔记 之 Action 过滤器

Action 过滤器在代码中体现为添加到Action上方的属性,MVC框架包含了一些过滤器,如: OutputCache –指示Controller在指定时间内缓存返回的结果. HandleError –处理Contrller中Action抛出的异常 Authorize – 约束特定用户或角色对Action的访问 使用Action 过滤器 Action 过滤器不仅可以控制单个Action,也可以控制整个Contrller.同时,一个Action可以应用多个过滤器.比如: public class

Asp.net MVC 2 使用Areas功能的常见错误

开发工具:VS2010中文旗舰版 出错的信息:   错误信息 找到了多个与名为"Home"的控制器匹配的类型.如果为此请求("{controller}/{action}/{id}")提供服务的路由没有指定命名空间来搜索匹配此请求的控制器,则会发生此情况.如果是这样,请通过调用采用"namespaces"参数的"MapRoute"方法的重载来注册此路由. 对"Home"的请求找到了下列匹配的控制器:MvcAp

Asp.net mvc 2 in action 笔记- 4 自动代码生成、校验Validation

自动代码生成 T4 (Text Template Transformation Toolkit) is a little-known feature of Visual Studio. It's a code-generation toolkit, and its templates allow us to customize how files are generated using a familiar syntax. T4MVC Out of the box, ASP.NET MVC co