Asp.Net运行时对象生成过程以及HttpHandler和HttpModule的处理过程。

ASP.NET HttpHandler与HttpModule职责分离原理 HttpHandler和HttpModule是ASP.NET请求管线中两类核心组件,分别承担响应内容生成与横切逻辑处理职责。其设计基于HTTP协议规范与管线事件驱动机制,通过24个标准化事件节点实现精确的执行时机控制。HttpHandler作为唯一拥有ProcessRequest调用权的组件,直接操作Response.OutputStream,决定最终响应体;而HttpModule以事件订阅方式介入各阶段,适用于日志、认证、压缩等全局性功能。这种职责分离架构支撑了高内聚、低耦合的系统演进,也是理解ASP.N 阅读详情

现在叙述最终要的过程,当asp.net在IIS的ISAPI获取一个aspx的系统请求,并获得控制权后发生了什么。

首先,它检测内存中是否有负责处理asp.net内容的运行库进程(IIS5是aspnet_wp.exe,IIS6是w3wp.exe),如果没有就创建一个,然后把控制权转给这个进程(就是函数指针跳转操作)。

当这个进程接到控制权后,检查进程里面的此站点的应用程序设置的应用程序域里面是否有HttpRuntime类的实例,没有就新建一个实例。一个服务器内可以有多个HttpRuntime类的实例,原因是一个服务器的IIS可能建立多个站点,而每个站点可能新建多个虚拟目录。但是每个站点仅能新建一个HttpRuntime类的实例,防止占用系统资源过多。

HttpRuntime就是asp.net的运行库程序的基础了。他负责控制每个站点/虚拟目录的asp.net请求(注意不是Http请求),但是它不负责处理请求。HttRuntime对象控制的是HttpApplicationFactory对象,它是一个类工厂对象,负责生成类的。

HttpApplicationFactory类负责控制一个对象池,对象池里面的对象就是我们经常使用的HttpApplication对象。
首先,HttpApplicationFactory负责处理global.ascx程序,并且触发Application_OnStart事件,然后从池中获取一个 HttpApplication 实例,并将要处理的请求放入实例中。如果没有可用的对象,则创建一个新的 HttpApplication 对象。要创建 HttpApplication 对象,需要先完成 global.asax 应用程序文件的编译。然后HttpApplication 开始处理请求,并且只能在完成这个请求后才能处理新的请求。如果收到来自同一资源的新请求,则由池中的其他对象来处理,就是说,如果一个站点有许多用户,那么多个用户的多个请求将由不同的HttpApplication来处理。

应用程序对象允许所有注册的 HTTP 模块对请求进行预处理(注意,这就是HttpModule开始工作了),并找出最适合处理请求的处理程序类型。这通过查找请求的 URL 的扩展和配置文件中的信息来完成。

所以说,最终处理asp.net页的是一个名叫HttpApplication的类实例。按照上面的步骤就可以得出:当HttpRuntime启动HttpApplicationFactory的时候,首先启动的是asp.net自己的事件预处理程序global.ascx,然后才轮到HttpApplication。

aspx的处理定义系统怎么知道的?答案就是从machie.config配置文件获取的。这个文件定义了所有的.aspx,.ashx,.asmx,.ascx等文件的处理程序。

结论:处理流程ISAPI --> aspnet_wp.exe/w3wp.exe --> HttpRuntime -->HttpApplicationFactory --> HttpApplication --> 内容Html

那么,我们是否可以自定义过程处理?可以的,方法就是贴主问的HttpModule(Http模块)和HttpHandle(Http处理器)的作用。

HttpModule就是在HttpApplication处理之前由HttpApplicationFactory运行的global.ascx的事件处理程序的自定义版,它可以让你自己写一个继承IHttpModule接口的类来代替asp.net来处理某个aspx页,甚至所有的aspx页,而不由asp.net帮助你处理。
而HttpHandler是经过global.ascx处理后所进行内容处理的HttpApplication的代替版,就是说你可以自己写一个类,继承IHttpHandler,来代替HttpApplication来处理某个aspx,或者所有的aspx,你可以随心所欲的来处理aspx的任何内容。不过所有的内容处理必须要你自己写代码来处理了,非常方便。

ASP.NET中HttpHandler与HttpModule的本质区别与选型指南 HttpHandler和HttpModule是ASP.NET请求生命周期中的两个核心扩展机制,分别承担资源处理与横切干预职责。其设计根植于IIS请求管道的阶段化模型:HttpHandler作为请求的唯一终点执行器,专注生成响应内容;HttpModule则是全程监听的事件订阅者,用于日志、认证、压缩等通用逻辑。理解二者在执行时机、作用范围、状态共享及线程安全上的根本差异,是避免Session丢失、响应乱码、CPU飙升等线上故障的关键。本文结合IIS集成模式、ASP.NET生命周期、请求处理阶段等实战要素,为. 阅读详情

相关推荐

HttpHandler与HttpModule核心区别及迁移指南

HttpHandler和HttpModule是ASP.NET请求管道中两类关键扩展机制,前者负责终结请求并生成响应,后者通过订阅生命周期事件实现横切逻辑。其设计本质源于对HTTP请求处理流程的分层抽象:Handler对应‘执行单元’,Module对应‘拦截增强’。这种分离支撑了鉴权、日志、缓存等通用能力的复用与解耦,构成传统Web Forms/MVC架构可维护性的底层基础。随着.NET Core演进,二者被Middleware(模块化中间件)和Endpoint Routing(轻量终结点)以更透明、可测试的

didi9310的博客 635

ASP.NET中的Http Handler

一、关于http handler    ASP.NET的请求过程是基于一个管道(pipeline)模型的,ASP.NET会把所有的http请求(Requests)都发送给这个管道里的http组件(modules)。每个组件在接收到http请求后进行一些相应的动作。当http请求通过了所有的http modules程序后,将会被交由一个http handler程序来处理,处理后的结果又将通过管道里h

POSSIBLE's BLOG 7823

基于BFQ19S的共射振荡器设计(克拉泼电容三点式)

根据理论,设计出如下LC振荡器: 一、设计初期是使用= 400Mhz作为目标值计算的, 但由于计算值与实际值有差别,所以使用计算值附近的元器件代替使用;最终该电路的L1=82nH , D1 = 5.6pF, C11=18pF, C12 = 18pF ; 另外R3= 600Ω, R4取27k , C9取10pF; 该电路实际的震荡频率为主要为L1,D1 决定,所以其震荡频率约为 == 235Mhz; 二、由于实际得到的频率比目标频率低太多,所以调整电路使其能达到400M左...

rzchong1988的专栏 3708

ASP.NET中的HttpClient发送请求

HttpClient是.NET4.5引入的一个HTTP客户端库,其命名空间为System.Net.Http。.NET 4.5之前我们可能使用WebClient和HttpWebRequest来达到相同目的。但是有几点值得关注: 可以使用单个HttpClient实例发任意数目的请求 一个HttpClient实例不会跟某个HTTP服务器或主机绑定,也就是说我们可以用一个实例同时给www.a.co...

weixin_30919571的博客 913

PromptBio实战:如何用AI对话搞定转录组数据分析(附详细操作截图)

本文详细介绍了如何利用PromptBio平台通过AI对话完成转录组数据分析,无需编程基础即可实现从数据上传到结果解读的全流程。文章包含详细的操作截图和参数配置建议,帮助科研人员快速掌握这一生信分析工具,显著提升研究效率。

weixin_30872157的博客 138

搭建Java集成开发环境IntelliJ IDEA

package net.huawei.p01.t02;/** * 功能:输出一条信息 * 作者:华卫 * 日期:2022年03月24日 */ public class HelloWorld { public static void main(String[] args) { // arguments System.out.println("Hello Java World~"); } }

qq_67308063的博客 477

.NET中使用HTTP 进行POST 数据

.NET中使用HTTP 进行POST 数据//序列化将要传输的对象 var requestJson = JsonTools.ObjectToJson(someobject); //构建HttpClient对象 HttpClient httpClient = new HttpClient(); //设置将要赋值的对象 HttpContent httpContent = new StringConte

慧不如痴 4917

西工大总分396上岸学长的经验分享|西北工业大学通信考研信号与系统

以上就是我的一些经验,当然每个人的情况与学习习惯都是不一样,以上仅供大家参考,具体的学习进度安排等都要依据个人的实际情况而定。基础阶段:高数比较推荐武忠祥老师,他讲的内容难度比较合适,知识的梳理也比较完备,基础阶段主要集中做书上的例题,在基础阶段,我们很容易出现知识点遗忘现象,所以要及时回顾讲义知识点,这个时候做660的时候建议延迟两三章去练习(比如学完第三章,我在找时间把第一章的660习题做完,对答案)这里不建议硬生生的把讲义过一遍,可以配套做880基础篇,880这本资料还是极力推荐的。

xiaomage_mengma的博客 723

HttpHandler HttpModule入门篇

ASP.Net处理Http Request时,使用Pipeline(管道)方式,由各个HttpModule对请求进行处理,然后到达 HttpHandler,HttpHandler处理完之后,仍经过Pipeline中各个HttpModule的处理,最后将HTML发送到客户端浏览器中。 生命周期中涉及到几个非常重要的对象:HttpHandler,HttpModule,IHttpHandlerFact...

weixin_34376562的博客 154

MATLAB基础应用精讲-【数模应用】数字预失真(DPD)(附MATLAB代码实现)

近年来,随着无线通信技术的发展,高功率放大器 (PA) 在提高信号传输功率的同时,也带来了非线性失真问题。PA的非线性失真会造成信号频谱扩展、功率下降、邻道干扰等问题,严重影响系统性能。为了克服PA的非线性失真,数字预失真 (DPD) 技术应运而生。DPD技术通过在发射机中引入一个非线性模块,对信号进行预失真处理,从而补偿PA的非线性失真。

qq_36130719的博客 899

lammps教程:MS转data文件出错原因分析及解决办法

使用ms建模是lammps建模的一种重要方法,但是ms建模转换为data过程中经常会出现各种各样的错误。 ms模型转data文件流程分两部分,一是ms建模、forcite设置力场并导出car文件,二是msi2lmp将car转为data文件。 任何一个环节出错都会导致无法得到data文件,最容易出错的是forcite力场设置环节。 forcite力场设置出错原因有很多,一个原因是缺乏某类原子的力场参数。 msi2lmp软件只能转换cvff或pcff力场的car文件,因此,如果力场中不包含某类原子的参数,在设置

lammps_jiayou的博客 5062

ASP.NET MVC加载ASCX之后,并为之赋值

Insus.NET有写过一篇《ASP.NET MVC显示UserControl控件(扩展篇)》http://www.cnblogs.com/insus/p/3642634.html ,还没有把此篇写完,就有网友问了,怎样交互。这个交互是指赋值与获取值的问题。 那Insus.NET来演示在ASP.NET MVC加载用户控件(ascx)之后,为ascx内的控件赋值的示例。 为ascx赋值,可以先参...

weixin_34331102的博客 211

Arduino ESP8266自定义配置分区表

ESP8266自定义分区表配置 随着项目的不断开发,项目文件也不断在增大,在没有考虑更换主硬件的条件下,最大开发利用有限资源势在必行,所以今天带来ESP8266自定义分区表的配置。 我这里以版本:2.7.4版本为例,后面的版本也是支持的。 注意:自定义分区表特别要注意和你的硬件相对应,flash芯片的大小决定这个分区是否有效,否则有意想不到的事情发现。 自定义分区表的几个重要参数 /* Flash Split for 4M chips */ /* sketch @0x40200000 (~1019K

perseverance51博客 1725

ASP.NET运行原理和运行机制

一、ASP.NET运行原理 当一个http请求发送过来并被IIS机收到之后,IIS首先通过你请求的页面类型为其加载相应的dll文件,然后在处理过程中将这条请求发送给能够处理这条请求的模块,而在ASP.NET中这个模块就叫做HttpHandler,为什么aspx这样的文件可以被服务器处理,那是因为在服务器端有默认的HttpHandler专门处理aspx文件,IIS再将这条请求发送给能够处理这条请求的模块之前,还需要经过一些HttpModule,这些都是系统默认的Modules,而且在这个http请求传到Htt

gqk01的博客 4277

详解AUTOSAR:DaVinci Configurator导入ARXML配置(拓展篇—2)

DaVinci Configurator导入ARXML配置。

不脱发的程序猿 3336

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

ASP.NET 中Http处理流程与 HttpModule,HttpHandler学习之初步认知

本文只是对HttpModule和HttpHandler做最初步的了解。非菜鸟级别人士可直接无视。 ASP.NET 中Http的请求流程    1. 用户发出的客户端请求达到服务器后,会被服务端的inetinfo.exe 进程捕获,该进程将该http请求转交给asp.net_isapi.dll进程,然后通过http pipeline 管道(具体这是什么东西我也不清楚)传送给asp

line_cheng的专栏 3596

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

ASP.Net 运行机制以及HttpModule和HttpHandler

ASP.Net 运行机制         1.使用动态Web开发技术         2.客户端通过浏览器输入地址,请求该动态页面         3.Web服务器根据客户端的请求,对Web应用程序进行编译或解释,并生成HTML流,返回给客户端         4.客户端浏览器解释HTML流,并显示为Web页面                  当请求发送至服务器IIS并被其接收后,I

寂寞的一只狗的博客 651

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

ASP.NET HttpModule && HttpHandler

ASP.NET对请求处理的过程: 当请求一个*.aspx文件的时候,这个请求会被inetinfo.exe进程截获,它判断文件的后缀(aspx)之后,将这个请求转交给 ASPNET_ISAPI.dll,ASPNET_ISAPI.dll会通过http管道(Http PipeLine)将请求发送给ASPNET_WP.exe进程,在ASPNET_WP.exe进程中通过HttpRuntime来处理这个请求

1846

HttpModule和HttpHandler的区别

在做ASP.NET开发岗位上有这么一句话,如果你不了解HttpModule和HttpHandler,那么你是一位不合格的程序员。那么什么是HttpModule和HttpHandler呢,接下来我与大家分享一下。 HttpModule:对于HTTP请求而言,HttpModule是HTTP请求的“必经之路”,它可以在改HTTP请求传递到最终的“请求处理中心(HttpHandler)”处理前做一些额外的工作,或者在某些情况下终止满足一些条件的HTTP请求,从而起到一个过滤器的作用。HttpModule可以有多个

weixin_46239451的博客 872

简述asp.net的httpApplication,httpModule,httpHandler

这三个都是asp.net站点的重要对象,首先分别为这三个角色定个概念 HttpApplication:这其实就是我们处理一个http请求的完整程序,httpModule及httpHandler对象都是由它来调用的 httpModule:传说中的管道事件就是在这个角色里面进行实现的,可以把它看成是以一个观察者模式外挂在请求流程中的一个通用处理类,HttpApplication在处理请求时,走到每个固...

zhao277949522的博客 1033

了解ASP .NET运行机制 HttpModule对象和HttpHandler对象

ASP .NET运行机制 当请求发送至服务器IIS并被其接收后,IIS服务器会判断请求文件的类型,如果是html、jpg、gif和txt等静态文件,IIS会自行根据目录找到文件并发送给客户端。如果是aspx页面的动态文件,则IIS会通过aspnet._isapi.dll将请求转交给ASP.NET运行时环境进行处理,最终的处理结果会返回给IIS,发送到客户端。在ASP.NET运行时,环境中的处理请求是通过一系列对象来完成的,包括HttpApplication、HttpModule和Http...

qq_56841522的博客 254

asp.net HttpModule与HttpHandler区别

一,什么是HttpHandler 在asp.net的网站中,在一个普通的请求地址“http://localhost:56093/Default.aspx”中“Default.aspx”就是handler。 也就是说在asp.net中page就是handler,在asp.net MVC中Controller就是handler,handler就是最终处理请求的那个类。 假如http://loca...

NCTU_to_prove_safety的博客 442

ASP.NET的必须知道的东东(HttpModule,HttpHandler)

asp.net架构 一 asp.net请求的处理过程 ------------------- HttpModule 必须要掌握的东西 HttpHandler 必须要掌握的东西,非常有用 以上两个的实例 --------------------- asp.net 事件模型机制 ----------------------- 一 客户的请求页面由aspnet_isapi.dll这个动态连接库来处...

weixin_33725272的博客 1092

ASP NET的 HttpModule HttpHandler

ASP NET的 HttpModule HttpHandler

gdfjhc的博客 139

ASP.NET 管道事件与HttpModule, HttpHandler简单理解

第一部分:转载自Artech IIS与ASP.NET管道 ASP.NET管道 以IIS 6.0为例,在工作进程w3wp.exe中,利用Aspnet_ispai.dll加载.NET运行时(如果.NET运行时尚未加载)。IIS 6引入了应用程序池的概念,一个工作进程对应着...

chengxiebi6944的博客 280
上一篇: asp.net HttpHand和HttpModule的详细解释,包括Asp.Net对Http请求的处理流程。
下一篇: 学了一段时间的Asp.Net 2.0后,心里一些想法
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值