Asp.Net 学习笔记(IIS不同版本和Asp.Net)
主要目的是在网上记录一下学习笔记,如有不对,请指出 谢谢!!
iis5.x:
存在问题,inet info收到动态请求后,aspnt_isapi.dll会被加载到inetinfo.exe(挂载w3svc服务)这个进程中,与工作进程通过管道进行通信,存在性能瓶颈
所有的asp.net应用运行在相同进程(aspnet_wp.exe)进程的不同进程域,并不能完全隔绝各个进程的相互影响
iis6.0
将isapi动态链接库直接加载到工作进程,不在挂载w3svc,还是有元数据库(http请求解析出的数据去元数据库对应web程序)
加入应用程序池概念,为一个多个web应用创建一个应用程序池,每一个对应独立的工作进程w3wp.exe,提供进程级别的隔离机制
创建了http.sys的http监听器,他以驱动程序的形式运行在windows的内核模式,是tcp/ip网络子系统的一部分,优点:始终处于运行状态,对用户的请求及时反映;稳定,运行在内核模式,不执行用户代码,不会受到其他影响;内核模式下数据缓存,频繁请求某个资源,会缓存。
问题:w3svc的功能:http请求接受,接受http.sys监听的http请求;配置管理,从metabase加载配置信息对相关组件配置;进程管理:创建、回收、监控工作进程
双管道模式,asp.net和iis不是同一个管道,通过isapi
iis7:
w3svc后两组功能给了was,提供了对非http协议的支持。通过提取监听接口抽象出不同监听器,提供基于tcp、命名管道等传输协议支持。某种意义上来说,w3svc相当于http.sys的监听适配器,三种非http监听器和监听适配器定义在程序集smsvchost.exe中,四个windows服务,其中一个是wcf的tcp端口共享
无论是w3svc的http请求还是wcf提供的监听适配器接收到的其他协议的请求,最后都会被传递到was,在进行请求处理过程中通过内置配置管理模块加载相关的配置信息
iis7完成两个管道的集成
asp.net管道:
w3wp.exe会利用aspnet_isap.dll(包含isapi的定义)加载.net运行时,一个运行池可以承载一个或者多个web应用
http请求处理:
http.sys监管接受到http请求,经过w3svc判断如果是动态请求某个web应用,w3wp.exe利用aspnet_isapi.dll加载.net运行时(如果运行时未加载)
然后,iis会通过app domain factory为该web应用创建应用程序域。,然后一个特殊的运行时isapiruntime(system.web.dll hosting)被加载,会接管该http请求。接管请求的isapiruntime会将请求封装为isapiworkrequset对象,然后传递给asp.net运行时httpruntime,至此,http请求进入asp.net管道。
httpruntime会根据isapiworkrequest对象创建用于表示当前http请求的context(上下文)对象http context。
创建完成后,http runtime会利用http application factory创建或获取现有(asp.net维护者一个http application对象池)的http application对象,
在http application初始化的时候,asp.net会根据配置文件加载并初始化注册的http module对象,
http application处理http请求的不同阶段会触发不同的事件,
而http module的意义是通过注册http application的相应事件,从而将所需要的操作(方法)注入到http处理的这个流程中,
最终完成http请求的处理是在http handler中,不同的http请求对应不同的http handle
http application是整个asp.net的核心,一个对象在某个时刻只能处理一个http请求,所以采用对象池机制来创建或者获取对象,第一个请求过来,会创建多个对象放入池中,选择一个进行处理,处理完成不会被回收,释放到池中,如果都处于繁忙,不超过最大数量可以创建再去处理,不然只能放到队列中等待,处理http请求相对复杂,不同阶段会触发相应的事件,。。。。。。。。
定制http application:
asp.net中的http application派生于global.asax文件,按照application_方法名
httpmodule:实现system.web.ihttpmodule接口 init实现自身初始化,接受一个http application对象,配置http handle 的方法,webconfig
可以在调用当前http context的remaphandler方法,制定一个具体的http handler对象,为了让asp.net直接跳过默认的http handler映射操作(在http application的postmaprequesthandler事件出发之前)
asp.net mvc就是通过扩展asp.net实现的,扩展点主要体现在http module和http handler,整个。。mvc自定义这两个核心组件建立起来。
下一篇等学习完自建一个小型asp.net mvc框架之后再继续讨论。
上一篇: iOS reason: '-[__NSArrayM objectForKeyedSubscript:]: unrecognized selector sent to instance 0x60800
推荐阅读
-
Asp.Net 学习笔记(IIS不同版本和Asp.Net)
-
ASP.NET学习笔记(十)Equals 和运算符==
-
ASP.NET学习笔记(十三)sealed、new、virtual、abstract 和 override
-
分享ASP.NET学习笔记(5)全局页面 AppStart 和 PageStart
-
ASP.NET学习笔记(十二)private、protected、public 和 internal
-
Asp.Net 学习笔记(IIS不同版本和Asp.Net)
-
ASP.NET MVC3 学习笔记----HTML.Action()和HTML.RenderAction()
-
ASP.NET学习笔记(十四)-abstract class 和 interface
-
ASP.NET学习笔记(十三)sealed、new、virtual、abstract 和 override
-
分享ASP.NET学习笔记(5)全局页面 AppStart 和 PageStart