IIS/ASPNET管道
前面我们对MVC模式及其变体作了详细的介绍其目的在于让读者充分地了解ASPNET MVC框架的设计思想接下来我们来介绍支撑ASPNET MVC的技术平台顾名思义ASPNET MVC就是建立在ASPNET平台上基于MVC模式建立的Web应用框架深刻理解ASPNET MVC的前提是对ASPNET管道式设计具有深刻的认识由于ASPNET Web应用总是寄宿于IIS上所以我们将两者结合起来介绍力求让读者完整地了解请求在IIS/ASPNET管道中是如何流动的由于不同版本的IIS的处理方式具有很大的差异接下来会介绍个主要的IIS版本各自对Web请求的不同处理方式
IIS x与ASPNET
我们先来看看IIS x是如何处理基于ASPNET资源(比如aspxasmx等)请求的整个过程基本上可以通过图体现IIS x运行在进程InetInfoexe中该进程寄宿着一个名为World Wide Web Publishing Service(简称WSVC)的Windows 服务WSVC的主要功能包括HTTP请求的监听工作进程和配置管理(通过从Metabase中加载相关配置信息)等
图 IIS x与ASPNET
当检测到某个HTTP 请求时先根据扩展名判断请求的是否是静态资源(比如htmlimgtxtxml等)如果是则直接将文件内容以HTTP 回复的形式返回如果是动态资源(比如aspxaspphp等)则通过扩展名从IIS的脚本映射(Script Map)中找到相应的ISAPI动态连接库(Dynamic Link LibraryDLL)
ISAPI(Internet Server Application Programming Interface)是一套本地的(Native)Win API是IIS和其他动态Web应用或平台之间的纽带ISAPI定义在一个动态连接库(DLL)文件中ASPNET ISAPI对应的DLL文件名称为aspnet_isapidll我们可以在目录%windir%\MicrosoftNET\Framework\{version no}\中找到它ISAPI支持ISAPI扩展(ISAPI Extension)和ISAPI筛选(ISAPI Filter)前者是真正处理HTTP请求的接口后者则可以在HTTP请求真正被处理之前查看修改转发或拒绝请求比如IIS可以利用ISAPI筛选进行请求的验证
如果我们请求的是一个基于ASPNET的资源类型比如aspxasmx和svc等aspnet_isapidll会被加载而ASPNET ISAPI扩展会创建ASPNET的工作进程(如果该进程尚未启动)对于IIS x来说该工作进程为aspnetexeIIS进程与工作进程之间通过命名管道(Named Pipes)进行通信
在工作进程初始化过程中NET 运行时(CLR)被加载进而构建了一个托管的环境对于某个Web应用的初次请求CLR会为其创建一个应用程序域(Application Domain)在应用程序域中HTTP运行时(HTTP Runtime)被加载并用以创建相应的应用寄宿于IIS x的所有Web 应用都运行在同一个进程(工作进程aspnet_wpexe)的不同应用程序域中
返回目录ASPNET MVC 框架揭秘
编辑推荐
Java程序性能优化让你的Java程序更快更稳定
Visual C++音频/视频技术开发与实战