ASP.NET和ASP.NET MVC的HttpApplication请求处理管道有共同的部分和不同之处,本系列将体验ASP.NET MVC请求处理管道生命周期的19个关键环节。

①以IIS6.0为例,首先由w3wp.exe维护着一个工作进程

②如果是第一次加载,由Aspnet_isapi.dll加载.NET运行时

③一个工作进程里有一个应用程序池,其中可以承载多个应用程序域AppDomain

④HTTP.SYS接收请求,通过应用程序域工厂AppDomainFactory创建应用程序域AppDomain

⑤一个IsapiRuntime被加载,并创建一个IsapiWorkerRequest对象封装当前的HTTP请求,并把该IsapiWorkerRequest对象传递给ASP.NET的HttpRuntime运行时,此时,  HTTP请求开始进入ASP.NET请求管道

也就是说,HttpRuntime是ASP.NET请求管道的入口。当请求进来,首先进入HttpRuntime,由HttpRuntime来决定如何处理请求。默认情况下,在machine.config和Web.config中并没有显式定义httpRuntime节点,但该节点是有默认值的,如下:

<httpRuntime
apartmentThreading="false"
appRequestQueueLimit=""
delayNotificationTimeout=""
enable="true"
enableHeaderChecking="true"
enableKernelOutputCache="true"
enableVersionHeader="true"
encoderType = "System.Web.Util.HttpEncoder"
executionTimeout=""
maxQueryStringLength = ""
maxRequestLength=""
maxUrlLength = ""
maxWaitChangeNotification=""
minFreeThreads=""
minLocalRequestFreeThreads=""
relaxedUrlToFileSystemMapping = "False"
requestLengthDiskThreshold=""
requestPathInvalidCharacters = "<,>,*,%,&,:,\"
requestValidationMode = "4.0"
requestValidationType = "System.Web.Util.RequestValidator"
requireRootedSaveAsPath="true"
sendCacheControlHeader="true"
shutdownTimeout=""
useFullyQualifiedRedirectUrl="false"
waitChangeNotification="" />

通常,我们可以在Web.config中更改httpRuntime节点的默认值,如下:

<configuration>
<system.web>
<httpRuntime maxRequestLength=""
enable = "True"
requestLengthDiskThreshold="
useFullyQualifiedRedirectUrl="True"
executionTimeout=""
versionHeader="1.1.4128"/>
</system.web>
</configuration>

⑥HttpRuntime维护着一个HttpApplication池,当有HTTP请求过来,从池中选取可用的HttpApplication处理请求

HttpApplication有19个管道事件,分别是:

、BeginRequest:HTTP管道开始处理请求时,会触发BeginRequest事件
、AuthenticateRequest:安全模块对请求进行身份验证时触发该事件
、PostAuthenticateRequest:安全模块对请求进行身份验证后触发该事件
、AuthorizeRequest:安全模块对请求进程授权时触发该事件
、PostAuthorizeRequest:安全模块对请求进程授权后触发该事件
、ResolveRequestCache:缓存模块利用缓存直接对请求进程响应时触发该事件
、PostResolveRequestCache:缓存模块利用缓存直接对请求进程响应后触发该事件
、PostMapRequestHandler:对于访问不同的资源类型,ASP.NET具有不同的HttpHandler对其进程处理。对于每个请求,ASP.NET会根据扩展名选择匹配相应的HttpHandler类型,成功匹配后触发该事件
、AcquireRequestState:状态管理模块获取基于当前请求相应的状态(比如SessionState)时触发该事件
、PostAcquireRequestState:状态管理模块获取基于当前请求相应的状态(比如SessionState)后触发该事件
、PreRequestHandlerExecute:在实行HttpHandler前触发该事件
、PostRequestHandlerExecute:在实行HttpHandler后触发该事件
、ReleaseRequestState:状态管理模块释放基于当前请求相应的状态时触发该事件
、PostReleaseRequestState:状态管理模块释放基于当前请求相应的状态后触发该事件
、UpdateRequestCache:缓存模块将HttpHandler处理请求得到的相应保存到输出缓存时触发该事件
、PostUpdateRequestCache:缓存模块将HttpHandler处理请求得到的相应保存到输出缓存后触发该事件
、LogRequest:为当前请求进程日志记录时触发该事件
、PostLogReques:为当前请求进程日志记录后触发该事件
、EndRequest:整个请求处理完成后触发该事件

我们可以在全局配置文件Global.asax中,按照约定的规则Application_{Event Name}来对管道事件定制:

void Application_Start(object sender, EventArgs e) {}
void Application_End(object sender, EventArgs e) {}
void Application_Error(object sender, EventArgs e) {}
void Session_Start(object sender, EventArgs e) {}
void Session_End(object sender, EventArgs e) {}
......

ASP.NET MVC请求处理管道生命周期的19个关键环节系列包括:

ASP.NET MVC请求处理管道生命周期的19个关键环节(1-6)

ASP.NET MVC请求处理管道生命周期的19个关键环节(7-12)

ASP.NET MVC请求处理管道生命周期的19个关键环节(13-19)

ASP.NET MVC请求处理管道生命周期的19个关键环节(1-6)的更多相关文章

  1. ASP.NET MVC请求处理管道生命周期的19个关键环节(7-12)

    在上一篇"ASP.NET MVC请求处理管道生命周期的19个关键环节(1-6) ",体验了1-6关键环节,本篇继续. ⑦根据IsapiWorkerRequest对象,HttpRun ...

  2. ASP.NET MVC请求处理管道生命周期的19个关键环节(13-19)

    在上一篇"ASP.NET MVC请求处理管道生命周期的19个关键环节(7-12) ",体验了7-12关键环节,本篇继续. ⒀当请求到达UrlRoutingModule的时候,Url ...

  3. Asp.net MVC 之请求生命周期

    今天主要试着描述一下ASP.NET MVC 请求从开始到结束的整个生命周期,了解这些后,对MVC会有一个整体的认识. 这里主要研究了MVC请求的五个过程. 1.创建RouteTable 当ASP.NE ...

  4. ASP.NET MVC 小牛之旅4:ASP.NET MVC的运行生命周期

    ASP.NET MVC的运行生命周期大致分成三大过程:(1)网址路由对比. (2)运行Controller与Action. (3)运行View并回传结果. 4.1网址路由对比 当iis收到http请求 ...

  5. 你真的熟悉ASP.NET MVC的整个生命周期吗?

    一.介绍 我们做开发的,尤其是做微软技术栈的,有一个方向是跳不过去的,那就是MVC开发.我相信大家,做ASP.NET MVC 开发有的有很长时间,当然,也有刚进入这个行业的.无论如何,如果有人问你,你 ...

  6. 详解ASP.NET MVC的请求生命周期

    本文的目的旨在详细描述asp.net mvc请求从开始到结束的每一个过程. 我希望能理解在浏览器输入url并敲击回车来请求一个asp.net mvc网站的页面之后发生的任何事情. 为什么需要关心这些? ...

  7. ASP.NET MVC的请求生命周期

    我希望能理解在浏览器输入URL并敲击回车来请求一个ASP.NET MVC网站的页面之后发生的任何事情. 为什么需要关心这些?有两个原因.首先是因为ASP.NET MVC是一个扩展性非常强的框架.例如, ...

  8. ASP.Net请求处理机制初步探索之旅 - Part 5 ASP.Net MVC请求处理流程

    好听的歌 我一直觉得看一篇文章再听一首好听的歌,真是种享受.于是,我在这里嵌入一首好听的歌,当然你觉得不想听的话可以点击停止,歌曲 from 王菲 <梦中人>: --> 开篇:上一篇 ...

  9. ASP.Net MVC请求处理流程

    ASP.Net MVC请求处理流程 好听的歌 我一直觉得看一篇文章再听一首好听的歌,真是种享受.于是,我在这里嵌入一首好听的歌,当然你觉得不想听的话可以点击停止,歌曲 from 王菲 <梦中人& ...

随机推荐

  1. 4. Prototype(原型)

    意图: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 适用性: 当要实例化的类是在运行时刻指定时,例如,通过动态装载:或者 为了避免创建一个与产品类层次平行的工厂类层次时:或者 当 ...

  2. java Thumbnails 加载网络图片,处理返回base64

    URL url = new URL("图片网络地址"); BufferedInputStream in = new BufferedInputStream(url.openStre ...

  3. com.microsoft.sqlserver.jdbc.SQLServerException: 用户 'sa' 登录失败。

    com.microsoft.sqlserver.jdbc.SQLServerException: 用户 'sa' 登录失败. at com.microsoft.sqlserver.jdbc.SQLSe ...

  4. Eclipse问题集锦

    1.SDK版本过低的问题. 现象: 更新SDK后,每次进入Eclipse,都会提示说需要23.0.0版本的SDK,当前的22.6.0版本的SDK版本过低:然而,确认更新后,结果却是说没有任何更新的东东 ...

  5. java swing 去掉按钮文字周围的焦点框

    闲来无事,写了个swing界面,运行后看到当点击按钮时,中间文字会出现一个刚好把文字围住的小方框,这是按钮获得焦点的标志,我是觉得一个字:丑!怎么去掉呢?万能的度娘告诉我,设置下button的setF ...

  6. C# 部分语法总结(入门经典)

    class Program { static void Main(string[] args) { init(); System.Console.ReadKey(); } #region 接口 /// ...

  7. python3下安装Django

    1.下载python3 https://www.Python.org/ 我下载的是Python3.5.1 选的 Windows x86-64 executable installer 2. 打开cmd ...

  8. Java 元注解

    元注解@Target,@Retention,@Documented,@Inherited * * @Target 表示该注解用于什么地方,可能的 ElemenetType 参数包括: * Elemen ...

  9. checked属性

    使用checked属性,你可以设置复选按钮和单选按钮默认被选中. 为此,只需在input元素中添加属性checked <input type="radio" name=&qu ...

  10. 第57讲:Scala中Dependency Injection实战详解

    本讲我们来学习下依赖注入.让我们从代码出发: package scala.learn trait Logger {def log (msg:String)}trait Auth {  auth:Log ...