日期:2014-05-17  浏览次数:21253 次

【转】ASP.NET Process Model之一:IIS 和 ASP.NET ISAPI

转自:http://www.cnblogs.com/artech/archive/2007/09/09/887528.html

?

??? 前几天有一个朋友在 MSN上问我“ ASP.NET 从最初的接收到 Http request到最终生成 Response的整个流程到底是怎样的?”我觉得这个问题涉及到 IIS ASP.NETASP.NET Runtime的处理模型的问题,并不是三言两语就能说清楚的,所以决定写这样一篇介绍 IIS ASP.NET Runtime Process Model的文章,谈谈我对此的一个粗浅的认识,如果有什么不对的地方,希望大家及时指正。

这篇文章大体分为两个部分,第一部分我将谈谈 IIS的两个不同的版本— IIS 5.x IIS 6(虽然 IIS 7已经 Release很长时间了,而且较之前两个版本发生了非常大的变化,由于本人缺乏对 IIS 7深入的了解,所以在这里就不再介绍了,不过以后我将这方面的内容补上)的处理模型: IIS如何监听来自外界的 Http request,如何根据 ISAPI Extension Mapping将对于不同 Resource的请求分发给不同的 ISAPI Extension,基于 ASP.NET Resource ASP.NET ISAPI如何将 Request传递给 ASP.NET Runtime 环境。第二部分将着重介绍在一个托管的 ASP.NET Runtime 环境对传入的 Http request的处理过程。我们先来看看 IIS 5.x IIS 6的处理过程。

1.???????????? 一、IIS 5.x based Process Model

IIS 5.x一个显著的特征就是 Web Server和真正的 ASP.NET Application的分离。作为 Web Server IIS运行在一个名为 InetInfo.exe的进程上, InetInfo.exe是一个 Native Executive,并不是一个托管的程序,而我们真正的 ASP.NET Application则是运行在一个叫做 aspnet_wp Worker Process上面,在该进程初始化的时候会加载 CLR,所以这是一个托管的环境。我们接下来将谈论 aspnet_wp如何创建, aspnet_wp InetInfo.exe如何进行通信,以及简单介绍在 aspnet_wp中,如何将 Request 导入 ASP.NET Rutime Pipeline

我们通过创建 虚拟目录将资源 Host IIS下,原则上,我们可以通过 IIS访问置于虚拟目录下的所有 Resource,这部仅仅包含一些静态资源文件,比如图片、纯 Html文件、 CSS JS等等,也包含一些需要动态执行的文件,比如 aspx asmx等等,我们还可以将 Remoting WCF Service Host IIS下。对于这些静态的文件, IIS直接提取对应的文件将其作为 Http Response返回给 Client,但是对于这些需要进一步处理的动态执行的文件, IIS必须将 Request进一步传递给对应的处理程序,待处理程序执行完毕获得最终的 Http Response通过 IIS返回给 Client。对于 IIS来说,这些处理程序通过 ISAPI Extension来体现。对于基于 ASP.NET Resource,其对应的 ISAPI Extension ASP.NET ISAPI,通过一个 aspnet_isapi.dll承载。 IIS Metadata database维护着一个称为 ISAPI Extension Mapping的数据表,负责将不同类型的 Resource影射到对应的 ISAPI Extension





                        <div class=