请求处理过程

浏览器 

发送请求(get/post)

根据Ip地址和端口 

找到服务器 

然后将请求报文

发给服务器

服务器上电脑 装的操作系统一般分为内核模式/用户模式

内核模式

操作系统的底层文件都运行在内核模式下,里面文件不能随意删除

Http.SYS 系统重要文件 :会对请求报文做最基本的处理,分析一下IP,端口号,然后转交给 用户模式中的IIS

用户模式

我们安装的软件都是运行下用户模式之下

IIS接收报文做处理,分析请求报文中所包含的文件扩展名,发现动态文件转交给

aspnet_iisapi.dll文件

工作进程W3WP.exe   作用:  应用程序池 :隔离机制

 每个网站对应一个进程

W3WP.exe  

分为两种模式

 非托管模式

aspnet_iisapi.dll(起到桥梁作用 加载.netframework运行时)

不在.netframework上写的程序理解成非托管

不通过.netframework上写的程序(C语言,C++...)都是非托管

托管模式

.netframework

在.netframework上写的程序都是托管

我们写的代码由.netframework编译生成,最终 二进制....然后交给CPU执行

以上内容不能开源码

IISAPIRuntime 接口

ISAPIRuntime这个类继承IISAPIRuntime 接口是进入.netframework入口

      | 

ProcessRequest(IntPtr ecb)

ecb是一个资源编号  (请求报文的资源编号) 根据ecb句柄创建了HttpWorkerRequest

HttpWorkerRequest封装了最原始的请求报文数据

HttpContexts是根据HttpWorkerRequest封装

请求报文数据最终都在HttpContext里面

HttpContexts创建时,也创建了HttpRequest和HttpResponse

对封装的报文数据进行处理 

在HttpApplicationFactory中处理请求报文数据

IHttpHandler applicationInstance=HttpApplication(完成HttpContext处理),在创建HttpApplication时用到了池,该池就是个栈

栈:先进后出  队列:先进先出

连接对象先放到池里面,一个请求过来要求连接数据库,先开一下池里有没有空闲连接对象,有拿过来用,没有再创建,避免了频繁创建,池本质上就是集合

如果池中有空闲的直接获取一个HttpApplication ,

如果没有则创建一个HttpApplication..

将HttpContext传递到了HttpApplication中的ProcessRequest方法中,该方法中执行了管道事件(里面有19个事件,20多个管道)

请求管道(过滤器)

在请求管道中第8个事件,主要完成的是对用户请求的文件类的实例创建(根据HttpContext封装的报文的文件类的实例进行创建new)

根据HttpContext封装的报文获取具体的文件)

都必须实现IHttpHandler接口

在请求管道第11个事件与第12个事件之间,执行了页面类中的代码,如果请求的是一般处理程序,之间

执行了一般处理程序中的ProcessRequest中的代码,如果是请求的是aspx,那么执行的是Page_Load中的代码

什么时候用到池这种技术?某一个对象经常被创建,创建对象的时候耗费的资源比较大

句柄:操作系统中的概念,将所有的资源都加了编号,根据资源编号找到资源进行操作.

最终还是让操作系统操作我们的文件

原文地址:https://www.cnblogs.com/ligtcho/p/6583210.html