学习ASP.NET MVC5框架揭秘笔记-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.xASP.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 LibraryDLL)。

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

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

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

1.3.2IIS6.0ASP.NET

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

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

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

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

除了上面两点改进之外,IIS6.0还有其他一些值得称道的地方,其中最重要的一点就是创建了一个名为HTTP.SYSHTTP监听器。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获取的URLWeb应用之间的映射关系得到目标应用,进而得到目标应用运行的应用进程池或工作进程。如果工作进程不存在(尚未创建或被回收),它为该请求创建新的工作进程。在工作进程的初始化过程中,相应的ISAP动态链接库被加载,对于ASP.NET应用来说,被加载的ISAPI.dllaspnet_isapi.dllASP.NET ISAPI负责进行CLR的加载、应用程序域的创建和Web应用的初始化等操作。

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

ASP.NET MVC 5 框架揭秘》以一个模拟ASP.NET MVC内部运行机制的“迷你版MVC框架”作为开篇,其目的在于将ASP.NET MVC真实架构的“全景”勾勒出来。接下来本书以请求消息在ASP.NET MVC框架内部的流向为主线将相关的知识点串连起来,力求将”黑盒式”的消息处理管道清晰透明地展示在读者面前。相信精读本书的读者一定能够将ASP.NET MVC从接收请求到响应回复的整个流程了然于胸,对包括路由、Controller的激活、Model元数据的解析、Action方法的选择与执行、参数的绑定与验证、过滤器的执行以及View的呈现等相关的机制具有深刻的理解。 本书以实例演示的方式介绍了很多与ASP.NET MVC相关的很好实践,同时还提供了一系列实用性的扩展,相信它们一定能够解决你在真实开发过程中遇到的很多问题。本书末章提供的案例不仅仅用于演示实践中的ASP.NET MVC,很多的架构设计方面的东西也包含其中。除此之外,本书在很多章节还从设计的角度对ASP.NET MVC的架构进行了深入分析,所以从某种意义上讲本书可以当成一本架构设计的书来读。 ASP.NET MVC 5 框架揭秘 目录 第1章 ASP.NET + MVC 第2章 路由 第3章 Controller的激活 第4章 Model元数据的解析 第5章 3个描述对象 第6章 Model的绑定(上篇) 第7章 Model的绑定(下篇) 第8章 Model的验证(上篇) 第9章 Model的验证(下篇) 第10章 Action方法的执行 第11章 View的呈现 第12章 过滤器 第13章 特性路由 第14章 案例实践
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值