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框架也是大同小异的. 本文主 ...
随机推荐
- Linux下tftp安装与配置
1. 背景 开发板在u-boot下从pc获取文件的方式有三种: 1)dnw传输:http://www.cnblogs.com/tanghuimin0713/p/3614768.html 2)串口传输: ...
- boost:进程管理
概述 Boost.Process提供了一个灵活的C++ 进程管理框架.它允许C++ developer可以像Java和.Net程序developer那样管理进程.它还提供了管理当前执行进程上下文.创建 ...
- Show Users Assigned to a Specific Role
In a previous post I showed you how to know what Roles are assigned to a specific user. But here is ...
- php 解决json_encode中文问题
众所周知使用json_encode可以方便快捷地将对象进行json编码,但是如果对象的属性中存在着中文,问题也就随之而来了.json_encode会将中文转换为unicode编码例如:'胥'经过jso ...
- 【积硅计划】html标签
一.基础 在html中,标签通常是由开始标签和结束标签组成,开始标签用<标签名>,结束标签用</标签名> 元素是指包括开始标签和结束标签在内的整体,内容是指出 ...
- phpStorm使用技巧及快捷键
下面是PhpStorm的注册码.Key,其license由用户名和License值组成. User name: EMBRACE License key: ===== LICENSE BEGIN === ...
- UART,USART,SPI,I2C等总线的介绍与区别20160526
首先来说一下UART和USART的区别: 1.字面意义: UART:universal asynchronous receiver and transmitter通用异步收发器: USART:univ ...
- IOS下载资源zip到本地然后读取
思路是 1.ios下载服务器上的zip资源包(图片,声音等经过zip压缩的资源包)到本地 2.解压zip到程序目录 3.从程序目录加载资源文件 一.下载zip资源 [cpp]-(NSString*)D ...
- SOCKET 地址
地址格式: 函数bind和getsockname使用通用数据类型:struct sockaddr*来指向socket地址. #incude <sys/socket.h> struct so ...
- 内核同步机制 RCU
Evernote分享地址:http://www.evernote.com/shard/s133/sh/8807320d-f54d-4e90-a31b-e2a3d35509ee/7539dc3931b8 ...