日期:2014-05-16  浏览次数:21062 次

ASP.NET之旅--深入浅出解读IIS架构

    在学习Asp.net时,发现大多数作者都是站在一个比较高的层次上讲解Asp.Net。 他们耐心、 细致地告诉你如何一步步拖放控件、 设置控件属性、编写 CodeBehind代码,以实现某个特定的功能。这种做法,实际上是回答了“如何去做”的问题,却没有回答“为什么可以这样做”的问题。这样有它的好处, 就是可以快速开发。 但建议多掌握一点底层知识,对一些问题会有更好的理解。希望通过这篇文章的,可以让你更好的理解IIS和 Asp.Net的运作原理。

    思考“为什么在地址栏输入 www.baidu.com就可以看到百度主页?”类似于思考“为什么苹果是往地上掉不是往天上飘?”。 对于普通访问者来说, 这就像每天太阳东边升起西边落下一样是理所当然的。 对于很多程序员来说, 认为这个与己无关,不过是系统管理员或者网管员的责任。毕竟,IIS 是Windows的一个组件,又不是Asp.Net的一个组成部分。而实际上,从你轻拍回车到页面呈现在你眼前的十分之一秒内,IIS 和.Net Framework已经做了大量的幕后工作,并且在IIS7.0以后的版本中Asp.net已经成为IIS的核心。

一、初识IIS

    IIS全称为Internet Information Server(网络信息服务管理器),它是微软公司主推的Web服务器。也就是说在理解IIS时首先我们应该把我们的电脑看做是一个网络服务器,而IIS就是管理网络信息的服务器管理程序。

    IIS有了基本的理解后我们再来看一个完整的网络请求,如下图:

 

    客户端在请求网页时首先要在网页中输入静态的IP地址或者网站域名,经过域名解析后如果请求的地址存在且合法则请求的内容会发送到服务器上。当服务器接收到一个  Http 请求的时候,IIS  首先需要决定如何去处理这个请求(如:服务器处理一个.htm 页面和一个.aspx页面肯定是不一样的么)。那 IIS 依据什么去处理呢?答案是:根据文件的后缀名。

    服务器获取所请求的页面(也可以是文件,如:sun.jpg)的后缀名以后,接下来会在服务器端寻找可以处理这类后缀名的应用程序, 如果 IIS找不到可以处理此类文件的应用程序,并且这个文件也没有受到服务器端的保护(如:一个受保护的例子就是App_Code中的文件, 一个不受保护的例子就是你的js脚本),那么 IIS 将直接把这个文件返还给客户端,如果IIS找到可处理的此类文件的应用程序后会使用托管代码对它进行编译,然后在返回到管道继续执行,最后返还回客户端。

    能够处理各种后缀名的应用程序,通常被称为ISAPI(在下面我们会讲到)应用程序。虽然这ISAPI听上去还挺气派,也算是“应用程序”呢,但仔细看看它的全称就明白了,它实际上只是一个接口,起到一个代理的作用,它的主要工作是映射所请求的页面(文件)和与此后缀名相对应的实际的处理程序。

    现在我们对网络请求有了初步的认识,但是还有很多疑问。IIS在收到HTTP请求后是如何对信息进行解析处理的,它内部的工作原理又是什么样的。不要着急,接下来我们马上说明。

二、再看IIS

    首先来看下IIS的基本构成。

 

    在向下解析IIS前我们要先认识些专有名字,这些名词都是IIS内重要的组成部分。

  1、何为请求管道

    对于IIS的初级开发人员来说,请求管道是一个很新的名词,它的作用和我们平常生活中所看到的管道是相同的,IIS在运行时会在应用程序池中创建一个运行管道,这个管道把HTTP的请求服务集成到了一起。

    那么这个请求管道就是集成了HTTP请求所需要的所有步骤的内容。ASP.NET使用的就是管道模式来处理的HTTP请求。

  2、何为托管代码