浏览器
发送请求(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中的代码
什么时候用到池这种技术?某一个对象经常被创建,创建对象的时候耗费的资源比较大
句柄:操作系统中的概念,将所有的资源都加了编号,根据资源编号找到资源进行操作.
最终还是让操作系统操作我们的文件