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


    转自:http://www.cnblogs.com/darrenji/p/3795661.html

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

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


    1

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


    2

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


    3

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


    4

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


    5

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

    复制代码
    <httpRuntime 
       apartmentThreading="false"
       appRequestQueueLimit="5000"
       delayNotificationTimeout="5"
       enable="true"
       enableHeaderChecking="true"
       enableKernelOutputCache="true"
       enableVersionHeader="true"
       encoderType = "System.Web.Util.HttpEncoder"
       executionTimeout="110"
       maxQueryStringLength = "2048"
       maxRequestLength="4096"
       maxUrlLength = "260"
       maxWaitChangeNotification="0"
       minFreeThreads="8"
       minLocalRequestFreeThreads="4"
       relaxedUrlToFileSystemMapping = "False"
       requestLengthDiskThreshold="80"
       requestPathInvalidCharacters = "<,>,*,%,&,:,"
       requestValidationMode = "4.0"
       requestValidationType = "System.Web.Util.RequestValidator"
       requireRootedSaveAsPath="true"
       sendCacheControlHeader="true"
       shutdownTimeout="90"
       useFullyQualifiedRedirectUrl="false"
       waitChangeNotification="0" />
    复制代码

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

    复制代码
    <configuration>
      <system.web>
      <httpRuntime maxRequestLength="4000"
        enable = "True"
        requestLengthDiskThreshold="512
        useFullyQualifiedRedirectUrl="True"
        executionTimeout="45"
        versionHeader="1.1.4128"/>
      </system.web>
    </configuration>
    复制代码

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


    6

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

    复制代码
    1、BeginRequest:HTTP管道开始处理请求时,会触发BeginRequest事件
    2、AuthenticateRequest:安全模块对请求进行身份验证时触发该事件
    3、PostAuthenticateRequest:安全模块对请求进行身份验证后触发该事件
    4、AuthorizeRequest:安全模块对请求进程授权时触发该事件
    5、PostAuthorizeRequest:安全模块对请求进程授权后触发该事件
    6、ResolveRequestCache:缓存模块利用缓存直接对请求进程响应时触发该事件
    7、PostResolveRequestCache:缓存模块利用缓存直接对请求进程响应后触发该事件
    8、PostMapRequestHandler:对于访问不同的资源类型,ASP.NET具有不同的HttpHandler对其进程处理。对于每个请求,ASP.NET会根据扩展名选择匹配相应的HttpHandler类型,成功匹配后触发该事件
    9、AcquireRequestState:状态管理模块获取基于当前请求相应的状态(比如SessionState)时触发该事件
    10、PostAcquireRequestState:状态管理模块获取基于当前请求相应的状态(比如SessionState)后触发该事件
    11、PreRequestHandlerExecute:在实行HttpHandler前触发该事件
    12、PostRequestHandlerExecute:在实行HttpHandler后触发该事件
    13、ReleaseRequestState:状态管理模块释放基于当前请求相应的状态时触发该事件
    14、PostReleaseRequestState:状态管理模块释放基于当前请求相应的状态后触发该事件
    15、UpdateRequestCache:缓存模块将HttpHandler处理请求得到的相应保存到输出缓存时触发该事件
    16、PostUpdateRequestCache:缓存模块将HttpHandler处理请求得到的相应保存到输出缓存后触发该事件
    17、LogRequest:为当前请求进程日志记录时触发该事件
    18、PostLogReques:为当前请求进程日志记录后触发该事件
    19、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)

  • 相关阅读:
    vue store获取值时 Computed property "activeTag" was assigned to but it has no setter.
    深拷贝实现方法以及问题
    mac 中git操作账号的保存与删除
    解决Ubuntu编译内核uImage出现问题“mkimage” command not found
    ubuntu修改主机名后无法解析主机
    多行宏定义中的注释问题
    uboot启动阶段修改启动参数方法及分析
    ubuntu nfs服务器配置
    mount/umount命令详解
    Ubuntu下vsftp安装和配置
  • 原文地址:https://www.cnblogs.com/sheseido/p/5943157.html
Copyright © 2020-2023  润新知