Welcome 微信登录

首页 / 网页编程 / ASP.NET / 浅谈ASP.NET的内部机制(二)

浅谈ASP.NET的内部机制(二)2011-09-15 博客园 小洋前言:大家知不知道,一个Http Request是如何被传递给ASP.NET的?而且ASP.NET是如何知道一个 Http Request是请求的.aspx这样的动态文件还是请求的.htm这样的静态文件?......

上次已经说到了http.sys和aspnet_filter的功能,希望大家还记得!

当一个请求(也就是http Request)通过了http.sys和aspnet_fitler后,此时这个请求还没有被传递 给ASP.NET的处理程序。但是此时IIS就会在它的MIME Type中查找请求文件的处理程序。

其实MIME Type不神秘,就是注册了哪些文件由哪些组件来处理。大家看看下面的图就明白了。

大家应该对上面的图很熟悉。而IIS就是通过查找上面的那个表来决定一个请求到底请求的是那种文件 ,如果是静态的文件,如htm,那么这个请求就直接由IIS来处理了,也不会传递给ASP.NET处理程序。如 果请求的文件是.aspx或者.asmx等,那么IIS就知道请求是就传递给aspnet_isapi.dll的,随后就启动一个 进程来加载这个dll,随后就开始进行一系列的初始化工作,然后就把请求传递给ASP.NET。

下面我们就来详细的看看,在真正处理一个请求的时候,到底进行了哪些的初始化操作。

1.当IIS知道了处理的是.aspx的文件后,就启动一个进程w3wp.exe来开始运行ASP.NET。

2.因为此时aspnet_isapi.dll已经加载运行了,而且aspnet_isapi.dll是一个用托管代码编写的组件 ,而所有的托管代码都要运行在应用程序域(Application Domain,以后我们简称Domain)中,所以进行加 载后,首先就是建立一个Domain。因为我们请求的是一个ASP.NET中的一个页面,而且这个页面是属于一 个用ASP.NET开发的网站,所以这个网站就是一个应用程序,要在Domain中运行的。但是建立一个Domain 要经过很多的步骤的。(注:大家也许认为没有必要把建立Domain的步骤弄清楚,但是我认为很有必要, 因为在建立一个Domain的过程中,涉及到很多的ASP.NET的内部问题,而且这个问题在实际开发中也很重 要,如ASP.NET运行时的权限和可信域(与安全问题相关),也涉及代码安全等,还可以帮助我们理解代码 的编译).