asp.net基础-http运行期执行概述

之前写过一些文章,处于为阅读者考虑的原因(其实也没什么人看,就是自己想多了),写得很啰嗦,有一种又当爹又当妈的感觉,真是操心的命。

现在回过头来看看,这么写出来的东西,不仅没人看,我自己也不愿意看,太啰嗦。然后有些时候,需要将自己理解的样子呈现出来。首先,说错了会有人跳出来鄙视;其次,好记性不如烂笔头,即使理解了,时过境迁,毕竟长大了,烦恼很多,不遗忘,真的做不到。

当一个httprequest发生时,IIS首先收到请求信息,根据扩展名的注册信息传送到asp.net ISAPI中,接着创建asp.net http runtime也就是对应的线程,runtime首先会创建一个httpcontext,很显然这个对象即包含了Request对象,也包含了Response对象,在整个请求过程中它就作为数据的中心。

之后就进入了HttpModule的处理管线,pipeline的设计方式在微软的组件当中十分的常见,通过一个管道套一个管道的方式,可以很灵活的依次对数据对象进行包装和处理,用户也可以很方便的加入自定义的module。WCF中的协议管道也是这个方式,类似于设计模式中的职责链,一环套一环,直到把对象洗白白。在这个管线中肯定有微软帮我们完成了的事情,比如高速缓存的查询,授权,认证。当然有begin就有end,在后处理的module中完成了update cache的操作。

第三部分就是真正处理这个请求的httphandler,主角总是在很多渲染之后登场的,没有人一开始就出王炸。。。这是HttpModule中的一个部分,这个过程中微软也是留足了事件的接口,pre和post包装了一圈httphandler。httphandler的核心部分就是processRequest方法,需要提一句的是,httphandler不是管道式的处理方式,我处理过的,其他的也就别想了。

最后,在完成一系列收尾的Module之后输出到客户端。

所以简单的说整个流程是如此:

Browser(request)--》IIS--》Asp.netISAPI--》HttpRuntime--》HttpModule(Pipeline,include HTTPHandler)--Output

写的比较粗糙,算是总括,很多内容可以展开到很具体,比如httphandler是如何创建的,它需要一个容器,因为httphandler可以有很多个,如何选择,创建,回收再利用。

随笔随笔,大方向对了,能让我想起来就好,具体的内容用的时候在捡起来吧。

参考链接:

http://www.cnblogs.com/stwyhm/archive/2006/08/09/471729.html
http://www.cnblogs.com/stwyhm/archive/2006/08/09/471729.html
http://www.cnblogs.com/stwyhm/archive/2006/08/09/471765.html
http://www.cnblogs.com/tenghoo/archive/2009/11/04/IIS_And_ASPNET_Http_Runtime_Pipeline.html

时间: 2025-01-07 13:32:51

asp.net基础-http运行期执行概述的相关文章

c++ 编译期与运行期总结

分享到 一键分享 QQ空间 新浪微博 百度云收藏 人人网 腾讯微博 百度相册 开心网 腾讯朋友 百度贴吧 豆瓣网 搜狐微博 百度新首页 QQ好友 和讯微博 更多... 百度分享 转自:http://hi.baidu.com/zhaoyong200518/item/8516dc59a65be1968d12edff c++ 编译期与运行期总结 一 见识编译期的力量 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #in

【Framework】HTTP运行期与页面执行模型

HTTP运行期 HTTP运行期处理客户端应用程序(例如Web浏览器)进入的一个Web请求,通过处理它的应用程序的适当组件路由请求,然后产生响应并发回提出请求的客户端应用程序. 进入的HTTP Web请求最先由IIS Web服务器接收到,它在此请求基于ASP.NET已注册处理的扩展名传送到ASP.NET ISAPI上. HTTP运行期首先创建一个HttpContext对象的实例,它包含了当前正在处理的请求信息,接着创建在处理逻辑中涉及到的所有其他组件都可以使用的上下文对象.HttpContext实

ASP.NET Core 2.2 基础知识(十六) SignalR 概述

原文:ASP.NET Core 2.2 基础知识(十六) SignalR 概述 我一直觉得学习的最好方法就是先让程序能够正常运行,才去学习他的原理,剖析他的细节. 就好像这个图: 所以,我们先跟着官方文档,创建一个 SignalR 应用: https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/signalr?view=aspnetcore-2.2&tabs=visual-studio 这个例子一共涉及到下面几个步骤: 自定义中心 ChatH

晚期(运行期)优化

晚期(运行期)优化 晚期运行期优化 Start HotSpot虚拟机内的即时编译器 几个问题 解释器与编译器 编译对象与触发条件 编译过程 Client Compiler Server Compiler 查看及分析即时编译结果 编译优化技术 公共子表达式消除 数组边界检查消除 方法内联 逃逸分析 Java与CC的编译器对比 ref Start "热点代码"(Hot Spot Code) – 运行特别频繁的方法或代码块:为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本

运维安全概述

运维安全概述 iv4n · 2015/09/02 19:31 0x00 前言 运维安全是企业安全保障的基石,不同于Web安全.移动安全或者业务安全,运维安全环节出现问题往往会比较严重. 一方面,运维出现的安全漏洞自身危害比较严重.运维服务位于底层,涉及到服务器,网络设备,基础应用等,一旦出现安全问题,直接影响到服务器的安全:另一方面,一个运维漏洞的出现,通常反映了一个企业的安全规范.流程或者是这些规范.流程的执行出现了问题,这种情况下,可能很多服务器都存在这类安全问题,也有可能这个服务还存在其他

Apache Spark源码走读之3 -- Task运行期之函数调用关系分析

概要 本篇主要阐述在TaskRunner中执行的task其业务逻辑是如何被调用到的,另外试图讲清楚运行着的task其输入的数据从哪获取,处理的结果返回到哪里,如何返回. 准备 1. spark已经安装完毕 2. spark运行在local mode或local-cluster mode local-cluster mode local-cluster模式也称为伪分布式,可以使用如下指令运行 MASTER=local[1,2,1024] bin/spark-shell [1,2,1024] 分别表

运行期优化

在部分商用虚拟机中,Java程序最初是通过解释器进行解释执行的,当虚拟机发现某个方法或代码块运行地特别频繁,就会把这些代码块认定为"热点代码",为了提高热点代码的执行效率,在运行时,虚拟机会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(JIT编译器). 解释器和编译器 当程序需要迅速启动和执行的时候,解释器可以首先发挥作用,省去编译的时间,立即执行.当程序运行后,随着时间的推移,编译器逐渐发挥作用,把越来越多的代码编译成本地代码之后,

JVM总结(六):晚期(运行期)优化

这节我们总结一下JVM运行期的优化问题. JVM运行期优化 即时编译器(JIT) 编译对象与触发条件 编译对象 触发条件 编译过程 编译优化技术 JVM运行期优化 Java程序在运行的期间,可能会有某个方法或者代码块的运行特别频繁时,就会把这些代码认定为“热点代码”.为了提高热点代码的执行效率,在运行时JVM会将这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(Just In Time Compiler,JIT编译器). 即时编译器(JIT) 事实上

标识符解析、作用域链、运行期上下文、原型链、闭包

本文讲到的是如何从数据访问层面上提高JS 代码的执行效率.总的来讲有以下几条原则: 函数中读写局部变量总是最快的,而全局变量的读取则是最慢的: 尽可能地少用with 语句,因为它会增加with 语句以外的数据的访问代价: 闭包尽管强大,但不可滥用,否则会影响到执行速度以及内存: 嵌套的对象成员会明显影响性能,尽量少用: 避免多次访问对象成员或函数中的全局变量,尽量将它们赋值给局部变量以缓存. 这么几句话看似简单,但要深刻理解其中的道理则需涉及到JS的 标识符解析.作用域链.运行期上下文(又称为执