asp.net页面的请求处理响应的过程描述

概述

本篇博客从IIS到asp.net页面后台运行完,整个过程做一个简单的描述,如果有不对的地方,望指出。

IIS处理请求的过程

我们通过浏览器(Socket客户端)访问一个IIS服务器上的网页时,该请求到达IIS服务器上后,IIS的http.sys(分发器)组件就会根据相应的判断,将其交给对应的应用程序池(IIS上都有相应的注册信息),对应的应用程序池接收到请求后,会将其交给相应的工作进程进行处理,工作进程接到请求后,根据请求文件的后缀名,进行判断,如果此文件IIS可以处理,则直接处理,如果处理不了,就从其注册的插件配置文件中查找可以处理该请求的插件(asp.net_isapi.dll,也可以是php等等插件),并将其交给该插件(代理),然后,插件就把请求交给真正的处理程序。

浏览器

从程序的角度上说,浏览器就是一个Socket客户端,而IIS就是一个Socket服务器,从而来实现通信的功能。对于上述,我们可以使用Telnet(Socket客户端,win自带安装程序,需要自己安装)来进行验证,cmd中输入telnet 127.0.0.1 80,就可以连接到服务器,然后发出请求,就会得到相应的回应,

asp.net_isapi.dll插件

IIS的插件机制,使得IIS可以服务于任何语言的网站,只要其在IIS上注册相应的插件,那么,IIS就可以处理这类文件的请求,如,你想通过IIS进行php的服务,只要注册上php的插件就可以了,这个思想非常的厉害,使IIS的扩展性得到大大的提高,当然,这个插件并不是正真处理请求的程序,而是一个代理,通过这个代理(注册时写在IIS配置文件的内容)就可以让IIS知道自己可以处理这类文件,并且,通过这个代理,可以将这个请求交给正真的程序去处理,当然,返回的结果也是通过这个进行返回的。

我们可以在IIS服务器上,查看处理程序映射中查看其可以处理的文件。如果你是先安装的VS,后安装的IIS的话,此时,如果你想让你的IIS可以处理asp.net的相应文件,需要我们手动的将asp.net_isapi.dll注册到IIS中,操作:cmd—》目录定位到安装在本机的具体版本的.net framework目录(里面有aspnet_regiis.exe程序)—运行aspnet_regiis.exe -i

.net framework的HTTP管道机制

asp.net_ispai.dall接受到请求后,将其交给.net framework,然后就开始进行http的管道机制了

.net framework接到请求,实例化HttpRuntime对象,并调用ProcessRequest方法,然后就是通过HttpApplicationFacotry实例化Application对象,在实例化的过程中会继续实例化话httpContext、HttpRequest、HttpResponse、Module等等,然后最后实例化IHttpHandler接口的实例。

如果大家注意的话,我们的asp.net页面就是IHttpHandler接口的一个实现者,asp.net页面继承page类,page类继承IHttpHandler接口,这样我们的asp.net页面就可以访问上面实例化的对象了。另外,Golbal文件继承HttpApplication文件,这样,我们就可以通过书写Golbal中的方法,去往Http管道中的事件进行注册了。

asp.net页面的生命周期

实例化IHttpHandler接口实例,实际就是实例化asp.net的页面,而在实例化asp.net页面的过程,主要经过这几个事件,初始化,加载,控件事件,保存state,渲染,卸载。这里我们需要知道页面上控件事件的执行是在,预渲染前,在load之后,当然,第一次的时候,是不会有控件事件触发的,在初始化阶段,完成控件树的创建和相应属性的赋值等,所以,在这里阶段时不要对控件的属性值进行操作,因为没有值,加载过程中,我们可以对控件进行相应的操作,如果想在load之前的话,就在preload中进行操作。

总结

在用文字描述的过程发现,不描述不知道,一描述的时候,察觉到自己没有把整个过程仔细想通,然后,经过又一次的查阅资料,才写出了这些东西,希望对读者有意,同时也建议读者去查阅一些别的资料,去加深自己的理解。

时间: 2024-10-16 16:53:43

asp.net页面的请求处理响应的过程描述的相关文章

【IIS】我所理解的IIS处理ASP.NET页面请求过程

众所周知,一个完整的动态网页的从请求到响应无非包括以下3个步骤: 1.浏览器客户端发出http请求. 2.IIS服务端接受请求. 3.处理请求并输出请求结果到浏览器客户端. 首先,简单的说说我所理解的IIS,它依赖于Windows服务World Wide Web Publish Service的,并依赖于进程w3wp.exe的.也就是说IIS的运行离不开工作进程w3wp.exe,同时每个IIS站点下的应用程序都是被用用程序池进行隔离,应用程序池即w3wp.exe的容器,通过池隔离的机制保证当某个

asp.net的HTTP请求处理过程

1.asp.net的HTTP请求处理过程 说明: (1).客户端浏览器向服务器发出一个http请求,此请求会被inetinfo.exe进程截获,然后转交给aspnet_isapi.dll进程,接着它又通过Http Pipeline的管道,传送给aspnet_wp.exe这个进程,接下来就到了.net framework的HttpRunTime处理中心,处理完毕后就发送给用户浏览器. (2).当一个http请求被送入到HttpRuntime之后,这个Http请求会继续被送入到一个被称之为HttpA

【转载】ASP.NET页面运行机制以及请求处理流程

本文转至 ASP.NET页面运行机制以及请求处理流程 IIS处理页面的运行机制 IIS自身是不能处理像ASPX扩展名这样的页面,只能直接请求像HTML这样的静态文件,之所以能处理ASPX这样扩展名的页面,是因为IIS有一个ISAPI过滤器,它是一个COM组件.ASP.NET服务在注册到IIS的时候,就会添加一个Win32的扩展动态库aspnet_isapi.dll.并将扩展可以处理的页面扩展名(如ASPX)注册到IIS里面.扩展启动后,就根据定义好的方式来处理IIS所不能处理的页面. 当客户端请

.NET MVC页面生命周期及传统ASP.NET页面周期

目前我主要使用.Net MVC框架进行网页创建,数据库是MSSQL Server.所以,我就用.NET MVC框架的web页面周期来说明页面的生命周期,但是我觉着其他MVC框架也是大同小异的. 本文主要分两个部分 一..NET MVC的网页生命周期 二.普通ASP.NET的网页生命周期 一..NET MVC的网页生命周期 ASP.NET MVC请求从开始到结束的每一个过程,在浏览器输入URL并敲击回车来请求一个ASP.Net MVC网站的页面之后发生的任何事情,都是页面的生命周期的一部分. 为什

Asp.Net页面生命周期--转发(学海无涯)

一.什么是Asp.Net页面生命周期 当我们在浏览器地址栏中输入网址,回车查看页面时,这时会向服务器端(IIS)发送一个request请求,服务器就会判断发送过来的请求页面,  完全识别 HTTP 页面处理程序类后,ASP.NET 运行时将调用处理程序的 ProcessRequest 方法来处理请求,来创建页面对象.通常情况下,无需更改此方法的实现,因为它是由 Page 类提供的.接下来被创建页面对象的ProcessRequest方法使页面经历了各个阶段:初始化.加载视图状态信息和回发数据.加载

转载:Asp.Net页面生命周期

转载:http://www.cnblogs.com/xhwy/archive/2012/05/20/2510178.html 一.什么是Asp.Net页面生命周期 当我们在浏览器地址栏中输入网址,回车查看页面时,这时会向服务器端(IIS)发送一个request请求,服务器就会判断发送过来的请求页面,  完全识别 HTTP 页面处理程序类后,ASP.NET 运行时将调用处理程序的 ProcessRequest 方法来处理请求,来创建页面对象.通常情况下,无需更改此方法的实现,因为它是由 Page

Asp.Net页面生命周期【转载,地址:http://www.cnblogs.com/xhwy/archive/2012/05/20/2510178.html】

一.什么是Asp.Net页面生命周期 当我们在浏览器地址栏中输入网址,回车查看页面时,这时会向服务器端(IIS)发送一个request请求,服务器就会判断发送过来的请求页面,  完全识别 HTTP 页面处理程序类后,ASP.NET 运行时将调用处理程序的 ProcessRequest 方法来处理请求,来创建页面对象.通常情况下,无需更改此方法的实现,因为它是由 Page 类提供的.接下来被创建页面对象的ProcessRequest方法使页面经历了各个阶段:初始化.加载视图状态信息和回发数据.加载

C# 问题解决思路--《数组bytes未定义》,ASP.NET页面加载顺序

好久没写博客了,废话不多说,直接说问题. 问题发生情况,首先这个是老项目,然后我是第一次修改.当我解决了各种引用,数据库配置之后等类似的问题,我启动的项目的时候,无任何问题,但是当我点击页面的按钮的时候,就报类型的错误. 因此,我按照我个人的经验,做出排查. 1.首先是代码问题,我根据按钮找到对应的后台事件,然后加上断点,发现根本就不进对应的断点.(说明不是按钮的后台代码的错误) 2.有可能是整个页面的后台代码的其他的错误,因此我搜索了该后台代码  看是否哪里出现了 bytes这个数组,结果没有

ASP.NET页面生命周期与控件生命周期

ASP.NET页面生命周期 (1)PreInit 预初始化(2)Init 初始化(3)InitComplete 初始化完成(4)PreLoad 预加载(5)Load 加载(6)LoadComplete 加载完成(7)PreRender 预输出(8)PreRenderComplete 预输出完成(9)Unload 卸载 ASP.NET控件生命周期 -- 实例化(Instantiate) 控件被页面或另一个控件通过调用它的构造器所实例化.这个步骤之后所列出的阶段,仅当控件加入控件树中才会发生. --