ASP.NET管道

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类  

    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>节点下添加:

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

  3.测试

时间: 2024-10-15 13:51:29

ASP.NET管道的相关文章

谈谈IIS与ASP.NET管道

作为一个Asp.Net平台开发者,非常有必要了解IIS和Asp.Net是如何结合,执行我们的托管代码,以及Asp.Net管道事件的. 本节目录 IIS 5.X IIS 6 IIS 7+ 集成模式 Asp.Net管道 HttpModule HttpHandle IIS 5.x InetInfo.exe与W3SVC服务 IIS 5.x运行在进程InetInfo.exe中,在该进程中一个最重要的服务就是名为World Wide Web Publishing Service(简称W3SVC)的Windo

Asp.net管道 (第二篇)

从请求进入ASP.NET工作者进程,直至它到达最终的处理程序之前要经过一系列的步骤和过程,这个步骤和过程称为ASP.NET处理管道. Asp.net的处理管道流程如下: 语言描述如下: Asp.net处理管道的第一步是创建HttpWorkerRequest对象,它包含于当前请求有关的所有信息. HttpWorkerRequest把请求传递给HttpRuntime类的静态ProcessRequest方法.HttpRuntime首先要做的事是创建HttpContext对象,并用HttpWorkerR

Asp.net管道模型(管线模型)

前言 为什么我会起这样的一个标题,其实我原本只想了解asp.net的管道模型而已,但在查看资料的时候遇到不明白的地方又横向地查阅了其他相关的资料,而收获比当初预想的大了很多. 有本篇作基础,下面两篇就更好理解了: 理解并自定义HttpHandler 理解并自定义HttpModule 目录 一般不写目录,感觉这次要写的东西有些多就写一个清晰一下吧. 1.Asp.net管道模型: 2.进程的子进程与进程的线程: 3.应用程序域(AppDomain): 4.IIS5.x下一个HTTP请求/响应过程的整

ASP.NET 管道事件与HttpModule, HttpHandler简单理解 -摘自网络

第一部分:转载自Artech  IIS与ASP.NET管道 ASP.NET管道 以IIS 6.0为例,在工作进程w3wp.exe中,利用Aspnet_ispai.dll加载.NET运行时(如果.NET运行时尚未加载).IIS 6引入了应用程序池的概念,一个工作进程对应着一个应用程序池.一个应用程序池可以承载一个或者多个Web应用,每个Web应用映射到一个IIS虚拟目录.与IIS 5.x一样,每一个Web应用运行在各自的应用程序域中. 如果HTTP.SYS接收到的HTTP请求是对该Web应用的第一

学习ASP.NET MVC框架揭秘笔记-IIS/ASP.NET管道(一)

IIS/ASP.NET管道 ASP.NET MVC就是建立在ASP.NET平台基础上基于MVC模式的Web应用框架,深入理解ASP.NET MVC的前提是对ASP.NET管道式设计有深刻的认识.由于ASP.NET Web应用大都寄宿于IIS上,接下来会介绍3个主要的IIS版本对各自Web请求的处理方式. 1.3.1 IIS 5.x与ASP.NET IIS 5.x运行在进程InetInfo.exe中,该进程寄宿着一个名为World WideWeb Publishing Service(简称W3SV

IIS与asp.net管道

我们在基于asp.net开发web程序,基本上都是发布部署到安装了IIS的windows服务器上,然后只要用户能够访问就算任务完成了,但是很少静下心来想想这背后到底发生了什么,那么这个系列就来总结下asp.net的基础原理. asp.net是什么 我们做web开发的可以说时时刻刻都在跟asp.net打交道,但很少总结asp.net是什么,可以用一句话总结: asp.net是一个开发web程序的平台. HTTP协议 由于web程序是基于HTTP协议的,所以在继续深入了解asp.net之前有必要学习

学习ASP.NET MVC框架揭秘笔记-IIS/ASP.NET管道(二)

IIS7.0与ASP.NET IIS7.0在请求的监听和分发机制上又进行了革新性的改进,主要体现在引入Window进程激活服务(Windows Process Activation Service,WAS)分流了原来(IIS6.0)W3SVC承载的部分功能.IIS6.0中W3SVC主要承载着如下三大功能. 1.HTTP请求接收:接收HTTP.SYS监听到的HTTP请求. 2.配置管理:从元数据库(metabase)中加载配置信息对相关组件进行配置. 3.进程管理:创建.回收.监控工作进程. II

WCF技术剖析之二:再谈IIS与ASP.NET管道

原文:WCF技术剖析之二:再谈IIS与ASP.NET管道 在2007年9月份,我曾经写了三篇详细介绍IIS架构和ASP.NET运行时管道的文章,深入介绍了IIS 5.x与IIS 6.0HTTP请求的监听与分发机制,以及ASP.NET运行时管道对HTTP请求的处理流程: [原创]ASP.NET Process Model之一:IIS 和 ASP.NET ISAPI [原创]ASP.NET Process Model之二:ASP.NET Http Runtime Pipeline - Part I

[Asp.Net]谈谈IIS与Asp.Net管道

作为一个Asp.Net平台开发者,非常有必要了解IIS和Asp.Net是如何结合,执行我们的托管代码,以及Asp.Net管道事件的. 本节目录 IIS 5.X IIS 6 IIS 7+ 集成模式 Asp.Net管道 HttpModule HttpHandle IIS 5.x InetInfo.exe与W3SVC服务 IIS 5.x运行在进程InetInfo.exe中,在该进程中一个最重要的服务就是名为World Wide Web Publishing Service(简称W3SVC)的Windo

学习ASP.NET MVC框架揭秘笔记-IIS/ASP.NET管道(三)

ASP.NET管道 以IIS6.0为例,它在工作进程w3wp.exe中会利用aspnet_isapi.dll加载.NET运行时(如果.NET运行时尚未加载).IIS6.0引入了应用程序进程池的概念,一个工作进程对应着一个应用程序池.一个应用程序进程池可以承载一个或者多个Web应用,每个Web应用映射到一个IIS虚拟目录.与IIS5.x一样,每一个Web应用运行在各自的应用程序域中. 如果HTTP.SYS接收到的HTTP请求是对该Web应用的第一次访问,在成功加载运行时后,IIS会通过AppDom