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中进行操作。
总结
在用文字描述的过程发现,不描述不知道,一描述的时候,察觉到自己没有把整个过程仔细想通,然后,经过又一次的查阅资料,才写出了这些东西,希望对读者有意,同时也建议读者去查阅一些别的资料,去加深自己的理解。
asp.net页面的请求处理响应的过程描述的更多相关文章
- ASP.NET编程模型之ASP.NET页面生命周期图解
ASP.NET编程模型中ASP.NET页面生命周期是指什么呢?它包括什么呢?ASP.NET编程模型之ASP.NET页面生命周期具体的过程有哪些呢?下面就开始我们的讲解吧: ASP.NET 页运行时,此 ...
- 关于ASP.NET页面事件的知识点
ASP是动态服务器页面(ActiveServerPage)的英文缩写,是微软公司开发的代替CGI脚本程序的一种应用,它可以与数据库和其它程序进行交互,是一种简单.方便的编程工具.那么关于ASP.NET ...
- asp.net的HTTP请求处理过程
1.asp.net的HTTP请求处理过程 说明: (1).客户端浏览器向服务器发出一个http请求,此请求会被inetinfo.exe进程截获,然后转交给aspnet_isapi.dll进程,接着它又 ...
- Asp.net页面生命周期详解任我行(3)-服务器处理请求详细过程
前言 百度了一下才知道,传智的邹老师桃李满天下呀,我也是邹老师的粉丝,最开始学习页面生命周期的时候也是看了邹老师的视频. 本人是参考了以下前辈的作品,本文中也参合了本人心得,绝非有意盗版,旨在传播,最 ...
- 【转载】ASP.NET页面运行机制以及请求处理流程
本文转至 ASP.NET页面运行机制以及请求处理流程 IIS处理页面的运行机制 IIS自身是不能处理像ASPX扩展名这样的页面,只能直接请求像HTML这样的静态文件,之所以能处理ASPX这样扩展名的页 ...
- asp.net页面生命周期
Asp.Net页面生命周期 本文转载自:http://www.cnblogs.com/xhwy/archive/2012/05/20/2510178.html 一.什么是Asp.Net页面生命周期 当 ...
- C# 问题解决思路--《数组bytes未定义》,ASP.NET页面加载顺序
好久没写博客了,废话不多说,直接说问题. 问题发生情况,首先这个是老项目,然后我是第一次修改.当我解决了各种引用,数据库配置之后等类似的问题,我启动的项目的时候,无任何问题,但是当我点击页面的按钮的时 ...
- Asp.Net页面生命周期--转发(学海无涯)
一.什么是Asp.Net页面生命周期 当我们在浏览器地址栏中输入网址,回车查看页面时,这时会向服务器端(IIS)发送一个request请求,服务器就会判断发送过来的请求页面, 完全识别 HTTP 页 ...
- .NET MVC页面生命周期及传统ASP.NET页面周期
目前我主要使用.Net MVC框架进行网页创建,数据库是MSSQL Server.所以,我就用.NET MVC框架的web页面周期来说明页面的生命周期,但是我觉着其他MVC框架也是大同小异的. 本文主 ...
随机推荐
- javaSE第二十天
第二十天 254 1:递归(理解) 254 (1)方法定义中调用方法本身的现象 254 (2)递归的注意事项 255 (3)递归的案例: 255 A:递归求阶乘 2 ...
- Count and Say [LeetCode 38]
1- 问题描述 The count-and-say sequence is the sequence of integers beginning as follows: 1, 11, 21, 1211 ...
- Django搭建及源码分析(一)
一.关于Django以下两个站点,在使用方面有详细说明. http://www.nowamagic.net/academy/part/13/286 http://www.w3cschool.cc/dj ...
- [译]MongoDb生产环境注意事项
译注: 本文是翻译MongoDB Manuel中的MongoDB Production Notes一节内容.这节内容重点关注生产环境中影响性能和可靠性的各种注意事项,值得正在部署MongoDB的工作者 ...
- Spark RDD的依赖解读
在Spark中, RDD是有依赖关系的,这种依赖关系有两种类型 窄依赖(Narrow Dependency) 宽依赖(Wide Dependency) 以下图说明RDD的窄依赖和宽依赖 窄依赖 窄依赖 ...
- phpMyAdmin提示“Access denied for user 'root'@'localhost' (using password: NO)”的解决办法
一.错误内容 在用thinkPHP登陆phpMyAdmin时遇到以下错误 #1045 - Access denied for user 'root'@'localhost' (using passwo ...
- 17) JMS: java Message Service(Java消息服务)
JMS是一个标准,就像EJB,有很多开源的,商业的实现,ms技术对应的规范是jsr914,规范的实现称为jms provider,常见的实现有ActiveMQ.JBoss MQ.IBM We ...
- Java中的类加载器----ClassLoader
1.简单的讲类加载器就是加载类. 在一个类要被执行时,首先会被从硬盘中加载到内存中,这个任务就是由类加载器来完成,如果加载不成功时,类是无法被执行的.类加载器执行的都是字节码二进制文件. 帮助文档 ...
- java android 访问DELPHI 的DATASNAP
最新版的DELPHI开发DATASNAP非常简单便捷,DataSnap的REST风格和对JSON的支持,使之成为服务器端开发的神器. 一.DATASNAP服务器中的方法: TServerMethods ...
- N进制数组转换成正整数
给定一个任意长度的数组,其中的元素按照一定的进制(N进制)来转换成正整数 //把数组中的元素按照N进制转换成为正整数 #include <stdio.h> #include <std ...