学习ASP.NET MVC框架揭秘笔记-IIS/ASP.NET管道(一)

IIS/ASP.NET管道

ASP.NET MVC就是建立在ASP.NET平台基础上基于MVC模式的Web应用框架,深入理解ASP.NET MVC的前提是对ASP.NET管道式设计有深刻的认识。由于ASP.NET Web应用大都寄宿于IIS上,接下来会介绍3个主要的IIS版本对各自Web请求的处理方式。

1.3.1 IIS 5.x与ASP.NET

IIS 5.x运行在进程InetInfo.exe中,该进程寄宿着一个名为World WideWeb Publishing Service(简称W3SVC)的Windows服务。W3SVC主要负责HTTP请求的监听、激活和管理工作进程、加载配置(通过从Metabase中加载相关配置信息)等。

当检测到某个HTTP请求时,IIS先根据扩展名判断请求的是静态资源(比如.html、.img、.txt、.xml等)还是动态资源。对于前者,IIS会将文件的内容直接响应给客户端,对于动态资源(比如.aspx、.asp、.php等)则通过扩展名从IIS的脚本映射(Script Map)中找到相应的ISAPI动态链接库(Dynamic Link Library,DLL)。

ISAPI(Internet Server Application Programming Interface)是一套本地的(Native)Win32API,是IIS和其他动态Web应用或平台的纽带。ISAPI定义在一个动态链接库(DLL)文件中,ASP.NET ISAPI对应的DLL文件名称为aspnet_isapi.dll。ISAPI支持ISAPI扩展和ISAPI筛选。前者是真正处理HTTP请求的接口,后者则可以在HTTP请求请求真正被处理之前查看、修改、转发或拒绝请求,比如IIS可以利用ISAPI可以利用ISAPI筛选进行请求的验证。

如果我们请求的是一个基于ASP.NET的资源类型,比如.aspx、.asmx、.svc等,aspnet_isapi.dll会被加载,ASP.NET ISAPI随后会创建ASP.NET的工作进程(如果该进程尚未启动)。对于IIS5.x来说,该工作进程为aspnet.exe。IIS进程与工作进程之间通过命名管道进行通信。

在工作进程初始化过程中,.NET运行时(CLR)会被加载以构建一个托管的环境。对于某个Web应用的初次请求,CLR会为其创建一个应用程序域。在应用程序域中,HTTP运行时被加载并用以创建相应的应用。寄宿于IIS 5.x的所有Web应用都运行在同一个进程(工作进程aspnet.exe)的不同应用程序域中。

1.3.2IIS6.0与ASP.NET

通过前面的介绍,我们可以看出IIS5.x至少存在如下两个方面的不足。

1.ISAPI动态链接库被加载到Interinfo.exe进程中,它和工作进程之间是一种典型的跨进程通信方式,尽管采用命名管道,但是仍然会带来性能的瓶颈。

2.所有的ASP.NET应用运行在相同进程的不同应用程序域中,基于应用程序域的隔离不能从根本上解决一个应用程序对另一个应用程序的影响,在更多的时候我们需要不同的Web应用运行在不同的进程中。

为了解决第一个问题,IIS6.0将ISAPI动态链接库直接加载到工作进程中。为了解决第二个问题,在IIS6.0中引入了应用程序池的机制。我们可以为一个或多个Web应用创建一个应用程序池,没一个应用程序池对应一个独立的工作进程(w3wp.exe),所以运行在不同应用程序池中的Web应用提供基于进程级别的隔离机制。

除了上面两点改进之外,IIS6.0还有其他一些值得称道的地方,其中最重要的一点就是创建了一个名为HTTP.SYS的HTTP监听器。HTTP.SYS以驱动程序的形式运行在Window的内核模式下,它是WindowTCP/IP网络子系统的一部分,从结构上看它属于TCP之上的一个网络驱动程序。

严格地说,HTTP.SYS已经不属于IIS的范畴了,所以HTTP.SYS的配置信息也没有保存在IIS的元数据库(Metabase),而是定义在注册表中。HTTP.SYS能带来如下的好处。

1.持续监听。由于HTTP.SYS是一个网络驱动程序,始终处于运行程序,所以对于用户的HTTP请求能够及时作出反应。

2.更好的稳定性。HTTP.SYS运行在操作系统内核模式下,并不执行任何用户代码,所以其本身不会受到Web应用、工作进程和IIS进程的影响。

3.内核模式下数据缓存。如果某个资源被频繁请求,HTTP.SYS会把响应的内容进行缓存,缓存的内容可以直接响应后续的请求。由于这是基于内核模式的缓存,不存在内核模式和用户模式的切换,响应速度将得到极大的改进。

当监听到HTTP请求时,HTTP.SYS将其分发给W3SVC,后者解析出请求的URL,并根据从Metabase获取的URL与Web应用之间的映射关系得到目标应用,进而得到目标应用运行的应用进程池或工作进程。如果工作进程不存在(尚未创建或被回收),它为该请求创建新的工作进程。在工作进程的初始化过程中,相应的ISAP动态链接库被加载,对于ASP.NET应用来说,被加载的ISAPI.dll为aspnet_isapi.dll。ASP.NET ISAPI负责进行CLR的加载、应用程序域的创建和Web应用的初始化等操作。

在下一章我们来讲解IIS7.0和ASP.NET

时间: 2024-12-24 17:24:27

学习ASP.NET MVC框架揭秘笔记-IIS/ASP.NET管道(一)的相关文章

学习ASP.NET MVC框架揭秘笔记-IIS/ASP.NET管道(二)

IIS7.0与ASP.NET IIS7.0在请求的监听和分发机制上又进行了革新性的改进,主要体现在引入Window进程激活服务(Windows Process Activation Service,WAS)分流了原来(IIS6.0)W3SVC承载的部分功能.IIS6.0中W3SVC主要承载着如下三大功能. 1.HTTP请求接收:接收HTTP.SYS监听到的HTTP请求. 2.配置管理:从元数据库(metabase)中加载配置信息对相关组件进行配置. 3.进程管理:创建.回收.监控工作进程. II

学习ASP.NET MVC框架揭秘笔记-IIS/ASP.NET管道(三)

ASP.NET管道 以IIS6.0为例,它在工作进程w3wp.exe中会利用aspnet_isapi.dll加载.NET运行时(如果.NET运行时尚未加载).IIS6.0引入了应用程序进程池的概念,一个工作进程对应着一个应用程序池.一个应用程序进程池可以承载一个或者多个Web应用,每个Web应用映射到一个IIS虚拟目录.与IIS5.x一样,每一个Web应用运行在各自的应用程序域中. 如果HTTP.SYS接收到的HTTP请求是对该Web应用的第一次访问,在成功加载运行时后,IIS会通过AppDom

学习ASP.NET MVC框架揭秘笔记目录

学习ASP.NET MVC框架揭秘笔记目录 第一章     ASP.NET+MVC 1.1传统的MVC模式 持续更新中,,,,

学习ASP.NET MVC框架揭秘笔记-实例演示:SC模式的应用

实例演示:SC模式的应用 为了对SC模式下的MVP,尤其是该模式下的View和Presenter之间的交互方式有一个深刻的认识,我们现在来做一个实例演示.我们采用员工查询的场景,用ASP.NET Web Forms来建立这个简单的应用. 我们先来定义员工的数据类型,Employee来表示一个员工,有5个属性:ID.姓名.性别.出生日期和部门. public class Employee { public string Id { get; private set; } public string

学习ASP.NET MVC框架揭秘笔记-MVP

1.2.1                      MVP MVP是一种UI架构模式,适用于基于事件驱动的应用框架.MVP中的M和V分别对应MVC的Model和View,而P(Presenter)代替了Controller. 在MVP模式中,能够与Model直接进行交互的仅限于Presenter,View只能通过Presenter间接地调用Model.Model的独立性在这里得到真正的体现,他不仅仅与可视化元素的呈现无关,与UI处理逻辑(Presenter)也无关. MVP不仅仅避免了View

学习ASP.NET MVC框架揭秘笔记-传统MVC模式

1.1传统MVC模式 对于大部分面向最终用户的应用来说,他们都需要具有一个与用户进行交互的可视化UI界面,我们将这个UI称为视图(View).在早期,我们倾向于将所有与UI相关的操作糅合在一起,这些操作包括UI界面的呈现.用户交互操作的捕捉与响应.业务流程的执行及对数据的存取等,我们将这种设计模式称为自治视图(Autonomuous View  ,  AV). 1.1.1  自治视图 1.1.2  什么是MVC模式

学习ASP.NET MVC框架揭秘笔记-自治视图

1.1.1自治视图 一个典型的人机交互应用具有3个主要的关注点,既数据在可视化界面上的呈现.UI处理逻辑(用于处理用户交互式操作的逻辑)和业务逻辑.自治视图模式将三者混合在一起,势必会带来如下一些问题. 1.重用性.业务逻辑是与UI无关的,应该最大限度地被重用,但是若将业务逻辑定义在自治视图中相当于使他完全与视图本身绑定在一起.除此之外,如果我们能够将UI的行为抽象出来,基于抽象化UI的处理逻辑也是可以被共享的,但是定义在自治视图中的UI处理逻辑也完全丧失了重用的可能. 2.稳定性.业务逻辑具有

学习ASP.NET MVC框架揭秘笔记-什么是MVC模式

1.1.2什么是MVC模式 MVC的创建者是Trygve M.H.Reenskau,他是挪威的计算机专家,同时也是奥斯陆大学的名誉教授.MVC是他在1979年提出的一种主要针对GUI应用的软件架构模式. MVC体现了"关注点分离"这一基本的设计方针,他将一个人机交互应用设计的功能分为Model.Controller和View三部分,他们各自具有如下的职责. 1.Model是对应用状态和业务逻辑的封装,我们可以将它理解为同时包含数据和行为的领域模型.Model接受Controller的请

学习ASP.NET MVC框架揭秘笔记-PV与SC

1.                                   PV与SC 解决View难以测试最好的办法就是让他无须测试.如果View不需要测试,其先决条件就是让它尽可能不涉及UI处理逻辑,这就是PV模式的目的所在. 如果我们纯粹的采用PV模式来设计View意味着我们需要将View中的UI元素通过属性的形式暴露出来.具体来说,当我们为View定义接口的时候,需要定义基于UI元素的属性使Presenter可以对View进行细粒度操作,但这并不意味着我们直接将View上的控件暴露出来.