Asp.Net请求原理and页面生命周期(转)

简介:

前天去面试,让我说下生命周期,本来之前就了解过,但是没说出来,被深深的鄙视了;今天弄了一上午,现在发到这分享一下,有什么错误请各位大牛们指出~~

页面发送请求原理


浏览器将请求封装成Http请求报文发送到服务器; 服务器端HTTP.SYS内核驱动模块来接收,这个模块监听着80
端口. 它首先去访问注册表确定请求交给谁去处理. 
将请求交给了IIS IIS中分为了两块
1. w3svc服务 .它是寄宿在svchost.exe进程里.主要负责将请求分发给具体的扩展程序. 具体分发给谁呢?

2.配置是在InetInfo这个进程里面. 这是iis的核心进程,这里放着IIS的元数据.
在这里.访问IIS核心进程,分析当前后缀的请求是静态还是动态.要交给哪个扩展来处理(.aspx;.ashx 动态的交给aspnet_isapi.dll处理).如果是静态的直接返回到HTTP.SYS 在浏览器中显示,如果是动态 ,交给一个aspnet_isapi.dll这个扩展处理 在IIS5中, 是aspnet_wp.exe;在IIS6中和7中,是w3wp.exe

每一个网站都跑在一个单独的工作进程里面,网站间是通过进程进行隔离的.(不同的网站跑在不同的进程里面,这个称为应用程序池技术)
而在IIS5中,只是有一个进程,它是通过应用程序域来隔离每个进程之间的关联;

如果是动态页面的话.w3svc服务将请求又交给了aspnet_isapi.dll这个扩展. 这个扩展负责启动aspnet runtime,负责创建aspnet运行环境.还负责将请求交给ISAPIRuntime的PR方法,也就是非托管和托管程序的入口

在ISAPIRuntime,这就可以看到之后的源代码了
1.ISAPIRuntime对象 它调用了它的一个.ProcessRequest(ecb)方法; ecb是一个操作系统的句柄,指向了当前请求的内存空间,可以通过此句柄来拿到当前请求的报文;通过ecb句柄,创建了一个HttpWorkRequest对象.此对象就是对Http请求报文做了一些简单的封装.也就是请求的报文头,报文体而已;
再一次的将请求给下面分发
分发给了HttpRuntime这个对象, 又调用了RrocessRequest(wr)方法;将ecb句柄创建的WorkRequest对象传进去.根据这个对象封装了一个HttpContext(请求上下文)
HttpContext中包括了HttpRequest(封装http请求),还有一个是 HttpResponse(封装了Http的响应)

并且HttpRuntime还根据HttpApplicationFactory工厂 获取一个HttpAplication对象
在这个工厂中,获取实例的时候,先去Applition池里去面去查看有没有空闲的HttpApplication对象.如果有直接返回,如果没有那么就先编译global文件生成一个HttpAppliction的派生类,然后根据这个派生类反射创建一个HttpAppliction类型实例并返回.

这个HttpAplication对象,调用了ProcessRequest(HttpContext context)执行19个管道事件,流动着的就是HttpContext上下文 context 这需要走23个步骤
在第8个事件中,根据请求的地址,创建一般处理程序或者是aspx页面类型,并转成IHttpHandler接口对象;
在第9个事件中,会接收浏览器发送过来的SessionId,并且根据此值到服务器的Session池中找到对应的session对象,先尝试将页面类对象转换成IRequiresSessionState接口对象,如果转换不成功,刚不加载Session对象,如果转换成功则 将它赋值给页面对象的Session属性;(Page.HttpContext.HttpSessionState)

(页面生命周期)
第一步:创建控件树
在11到12个事件中.执行页面类(一般处理程序)的ProcessRequest方法 ;

     过程看下图

 

下面是我用反编译查看了下它内部的执行顺序..

1:

2:

3:

4:

5:

6:

7:

8:

9:

10:

11:

12:

13:

14:

15:

 

自:http://www.cnblogs.com/haxwn/archive/2013/03/09/haxwn.html



本文转自武沛齐博客园博客,原文链接:http://www.cnblogs.com/wupeiqi/archive/2013/03/10/2952214.html,如需转载请自行联系原作者

目录
相关文章
|
11月前
|
开发框架 中间件 .NET
ASP.NET Core 请求处理管道
ASP.NET Core (请求处理管道) 了解ASP.NET处理管道为了理解ASP.NET Core中的请求处理管道概念,让我们修改Startup类的Configure()方法,如下所示。 在这里,我们将三个中间件组件注册到请求处理管道中。 如您所见,前两个组件是使用Use() 扩展方法注册的,因此它们有机会在请求处理管道中调用下一个中间件组件。 最后一个使用Run() 扩展方法注册,因...
37 0
ASP.NET Core 请求处理管道
|
11月前
|
关系型数据库 MySQL 数据库
找不到请求的 .Net Framework Data Provider。可能没有安装
做的一个项目,框架为.net framework 数据库为mysql 出现如标题错误 检查是否安装mysql、是否安装mysql connector net 笔者是因为没有安装后者mysql connector net 下载地址: [mysql connector net](https://downloads.mysql.com/archives/c-net/ "mysql connector net") 笔者安装截图如下: ![请在此添加图片描述](https://developer-private-1258344699.cos.ap-guangzhou.myqcloud.com/c
148 0
|
24天前
|
开发框架 JavaScript 前端开发
揭秘:如何让你的asp.net页面变身交互魔术师——先施展JavaScript咒语,再引发服务器端魔法!
【8月更文挑战第16天】在ASP.NET开发中,处理客户端与服务器交互时,常需先执行客户端验证再提交数据。传统上使用ASP.NET Button控件直接触发服务器事件,但难以插入客户端逻辑。本文对比此法与改进方案:利用HTML按钮及JavaScript手动控制表单提交。后者通过`onclick`事件调用JavaScript函数`SubmitForm()`来检查输入并决定是否提交,增强了灵活性和用户体验,同时确保了服务器端逻辑的执行。
34 5
|
25天前
|
开发框架 缓存 .NET
并发请求太多,服务器崩溃了?试试使用 ASP.NET Core Web API 操作筛选器对请求进行限流
并发请求太多,服务器崩溃了?试试使用 ASP.NET Core Web API 操作筛选器对请求进行限流
|
12天前
|
数据采集 JSON API
异步方法与HTTP请求:.NET中提高响应速度的实用技巧
本文探讨了在.NET环境下,如何通过异步方法和HTTP请求提高Web爬虫的响应速度和数据抓取效率。介绍了使用HttpClient结合async和await关键字实现异步HTTP请求,避免阻塞主线程,并通过设置代理IP、user-agent和cookie来优化爬虫性能。提供了代码示例,演示了如何集成这些技术以绕过目标网站的反爬机制,实现高效的数据抓取。最后,通过实例展示了如何应用这些技术获取API的JSON数据,强调了这些方法在提升爬虫性能和可靠性方面的重要性。
异步方法与HTTP请求:.NET中提高响应速度的实用技巧
|
4月前
|
开发框架 .NET 中间件
七天.NET 8操作SQLite入门到实战 - (2)第七天Blazor班级管理页面编写和接口对接
七天.NET 8操作SQLite入门到实战 - (2)第七天Blazor班级管理页面编写和接口对接
|
26天前
|
数据采集 API 开发者
.NET 8新特性:使用ConfigurePrimaryHttpMessageHandler定制HTTP请求
在.NET 8中,通过`ConfigurePrimaryHttpMessageHandler`方法,开发者能更精细地控制HTTP请求,这对于构建高效爬虫尤为重要。此特性支持定制代理IP、管理Cookie与User-Agent,结合多线程技术,有效应对网络限制及提高数据采集效率。示例代码展示了如何设置代理服务器、模拟用户行为及并发请求,从而在遵守网站规则的同时,实现快速稳定的数据抓取。
.NET 8新特性:使用ConfigurePrimaryHttpMessageHandler定制HTTP请求
|
28天前
|
数据采集 开发框架 .NET
HttpClient在ASP.NET Core中的最佳实践:实现高效的HTTP请求
在现代Web开发中,高效可靠的HTTP请求对应用性能至关重要。ASP.NET Core提供的`HttpClient`是进行这类请求的强大工具。本文探讨其最佳实践,包括全局复用`HttpClient`实例以避免性能问题,通过依赖注入配置预设头部信息;使用代理IP以防IP被限制;设置合理的`User-Agent`和`Cookie`来模拟真实用户行为,提高请求成功率。通过这些策略,可显著增强爬虫或应用的稳定性和效率。
HttpClient在ASP.NET Core中的最佳实践:实现高效的HTTP请求
|
29天前
|
开发框架 前端开发 .NET
七天.NET 8操作SQLite入门到实战 - (3)第七天Blazor学生管理页面编写和接口对接
七天.NET 8操作SQLite入门到实战 - (3)第七天Blazor学生管理页面编写和接口对接
|
25天前
.NET Core 在其上下文中,该请求的地址无效。
.NET Core 在其上下文中,该请求的地址无效。
16 0