zoukankan      html  css  js  c++  java
  • Asp.Net生命周期和Http管道技术

    本篇主要介绍一下内容:

    1.ASP.NET生命周期

    2.Http运行时

    3.Http管道技术

      a)inetinfo.exe

      b)asp.net_isapi.dll

      c)aspnet_wp.exe

      d)HttpHandler

      e)HttpModule

    4.实现Httphandler的使用

    5.ASP.NET生命周期

    6.(IIS)Web服务器(inetinfo.exe):

      1.只有少数几种被客户端请求的资源类型由iis直接处理,如对Html页面,文本文件,jpeg和gif图像的传入请求

      2.对ASP.NET资源(*.aspx,*.asmx,*.ashx)的请求将传递到ASP.NET ISAPI扩展,该系统组件是一个名为

        aspnet_isapi.dll的Win32 Dll

    7.aspnet_isapi.dll:可以处理多种资源类型,包括Web服务和Http处理程序调用

    8.ASP.NET辅助进程(aspnet_wp.exe):

      1.由aspnet_isapi.dll负责调用

      2.aspnet_wp.exe负责控制请求的执行,并可以终止请求

    9.aspnet_isapi.dll

     用此命令进行 注册映射表,即将*.aspx与aspnet_isapi.dll关联起来

    (注意:可以添加自己的映射,如将*.Refactor与aspnet_isapi.dll关联起来,这时候请求后缀名为Refactor的文件和请求*.aspx一样)

     10.ISAPI与辅助进程的关系

      1.ISAPI和辅助进程间的通讯是使用一组 "命名管道" 进行的

      2.命名管道 是一种Win32机制,用于跨进程边界传输机制,命名管道的工作方式

        与管道相似:在一端传入数据,在另一端输出相同的数据.建立管道既可以连接

        本地进程,也可以连接远程计算机上运行的进程,对于本地进程间通讯,管道是

        Windows中最有效,最灵活的工具.

      3.ISAPI使用异步命名管道来将请求转发给 辅助进程并获得相应

      4.辅助进程 在需要查询有关IIS环境的信息(即服务器变量)时又使用同步管道

      5.ISAPI模块创建固定数量的 命名管道,并使用重叠的操作以通过小的线程池

        处理同一时间进行的连接.当通过管道进行的数据交换操作结束后,完成例程

        将断开客户端,并重新使用管道实例为新的客户端服务.线程池和重叠操作均

        可以保证使ASP.NET ISAPI的性能达到令人满意的水平.

        但是ASP.NET ISAPI扩展绝不会处理Http请求

    11.ASP.NET的处理逻辑:

      1.当请求到达时,IIS检查资源类型并调用ASP.NET ISAPI扩展.如果启用了默认的

        进程模型,aspnet_isapi会将请求排队,并将请求分配给 辅助进程.所有的

        请求数据都是通过异步I/O发送

      2.收到请求后,ASP.NET辅助进程将通知ASP.NET ISAPI,它将为请求服务(建立管道)

      3.在辅助进程的上下文中执行请求.有时,辅助进程可能需要回调ISAPI以完成请求,也就是

        需要说枚举服务器变量.这种情况下,辅助进程将使用同步管道,因为这样可以保持

        请求处理的逻辑顺序.

      4.完成后,响应被发送到打开了异步管道的aspnet_isapi.如果aspnet_isapi检测到

        辅助进程已取消,它将自动终止请求并释放所有相关的IIS资源

    12.ASP.NET运行时环境

      1.构成ASP.NET运行时环境的可执行文件  

      2.aspnet_filter.dll组件是一个小的Win32 ISAPI筛选器,用来备份ASP.NET应用程序的无Cookie会话状态

      3.aspnet_state.exe的作用对Web应用程序更为重要,因为他用于管理会话状态

    13.Http管道

      1.在ASP.NET应用程序中,系统使用一组相关的类,通过一定的顺序来处理客户端的请求(Requset),

        ASP.NET应用程序的处理模式可称之为Http处理管道

      2.HttpModule和HttpHandler就是这个处理管道上的两个处理环节

    下图为 灰色部分的 示意图:

    14.介绍上图各个类的作用

      1.HttpWorkerRequest抽象类定义了ASP.NET页面处理请求的基本方法

      2.HttpRuntime提供了处理应用的一组服务

      3.HttpContext保存了处理一次请求的所有相关上下文信息

      4.HttpApplicationFactory提供相关目录的应用程序

      5.HttpApplicaiton定义了所有ASP.NET应用程序的通用的方法,属性和事件,这个类也是

        在用户在global.asax文件中定义的应用基类

      6.HttpModules处理请求前和响应后的事件

      7.HandlerFactories提供应用程序中的Handlers

      8.HttpHandlers处理请求和响应

    15.HttpHandler

      1.HttpHandler处理请求(Request)的信息和发送响应(Response)

      2.HttpHandler实现类似于ISAPI Extention的功能

      3.System.Web.UI.Page类也实现了HttpHandler接口

      4.可以通过HttpHandler拦截请求,执行我们的自定义处理程序

    16.HttpHandler示例

      1.新建一个RefactorHandler类  

    View Code
        public class RefactorHandler : IHttpHandler
        {
            public void ProcessRequest(HttpContext context)
            {
                HttpResponse response = context.Response;
                HttpRequest request = context.Request;
    
                //获取用户请求的文件
                string filePath = request.FilePath;
                if (filePath.EndsWith("Refactor"))
                {
                    response.Write("<html><body>欢迎来到我的博客:" +
                                   "</br>" +
                                   "<a href='http://www.cnblogs.com/refactor'>Refactor's blog http://www.cnblogs.com/refactor </a></body></html>");
                }
            }
    
            public bool IsReusable
            {
                get { return true; }
            }
        }

       2.修改Web.config 

        在  <system.web>节点下添加: 

    View Code
        <httpHandlers>
          <add verb="*" path="*.Refactor" type="HttpHandlerAndHttpModule.RefactorHandler"/>
        </httpHandlers>

      3.测试

     

     转载请注明出处:http://www.cnblogs.com/refactor

  • 相关阅读:
    【NOIP2007】守望者的逃离
    20200321(ABC)题解 by 马鸿儒 孙晨曦
    20200320(ABC)题解 by 王一帆
    20200319(ABC)题解 by 王一帆 梁延杰 丁智辰
    20200314(ABC)题解 by 董国梁 蒋丽君 章思航
    20200309(ABC)题解 by 梁延杰
    20200307(DEF)题解 by 孙晨曦
    20200306(ABC)题解 by 孙晨曦
    20200305(DEF)题解 by 孙晨曦
    20200303(ABC)题解 by 王锐,董国梁
  • 原文地址:https://www.cnblogs.com/refactor/p/2568742.html
Copyright © 2011-2022 走看看