|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我有个同学,他是搞Java的,他给我说“Java不是效率低,而是速度慢。”,我不是搞Java的,我实在想不透这句话的含义,难道执行速度不就是效率低吗?难道执行速度慢还成效率高了?ASP.NET是一个十分壮大的构建Web使用的平台,它供应了极年夜的天真性和才能乃至于能够用它来构建一切范例的Web使用。
尽年夜多半的人只熟习高层的框架如:WebForms和WebServices--这些都在ASP.NET条理布局在最高层。
这篇文章的材料搜集收拾自各类微软公然的文档,经由过程对照IIS5、IIS6、IIS7这三代IIS对哀求的处置历程,让我们熟习ASP.NET的底层机制并对哀求(request)是怎样从Web服务器传送到ASP.NET运转时有所懂得。经由过程对底层机制的懂得,可让我们对ASP.net有更深的了解。
IIS5的ASP.net哀求处置历程
对图的注释:
IIS5.x一个明显的特性就是WebServer和真实的ASP.NETApplication的分别。作为WebServer的IIS运转在一个名为InetInfo.exe的历程上,InetInfo.exe是一个NativeExecutive,并非一个托管的程序,而我们真实的ASP.NETApplication则是运转在一个叫做aspnet_wp的WorkerProcess下面,在该历程初始化的时分会加载CLR,以是这是一个托管的情况。
ISAPI:指可以处置各类后缀名的使用程序。ISAPI是上面单词的简写:InternetServerApplicationProgrameInterface,互联网服务器使用程序接口。
IIS5形式的特性:
1、起首,统一台主机上在统一工夫只能运转一个aspnet_wp历程,每一个基于假造目次的ASP.NETApplication对应一个ApplicationDomain,也就是说每一个Application都运转在统一个WorkerProcess中,Application之间的断绝是基于ApplicationDomain的,而不是基于Process的。
2、其次,ASP.NETISAPI不仅卖力创立aspnet_wpWorkerProcess,并且卖力监控该历程,假如检测到aspnet_wp的Performance下降到某个设定的上限,ASP.NETISAPI会卖力停止失落该历程。当aspnet_wp停止失落以后,后续的Request会招致ASP.NETISAPI从头创立新的aspnet_wpWorkerProcess。
3、最初,因为IIS和Application运转在他们各自的历程中,他们之间的通讯必需接纳特定的通讯机制。实质上IIS地点的InetInfo历程和WorkerProcess之间的通讯是统一台呆板分歧历程的通讯(localinterprocesscommunications),处于Performance的思索,他们之间接纳基于Namedpipe的通讯机制。ASP.NETISAPI和WorkerProcess之间的通讯经由过程他们之间的一组Pipe完成。一样处于Performance的缘故原由,ASP.NETISAPI经由过程异步的体例将Request传到WorkerProcess并取得Response,可是WorkerProcess则是经由过程同步的体例向ASP.NETISAPI取得一些基于Server的变量。
IIS6的ASP.net哀求处置历程
对图的注释:
IIS5.x是经由过程InetInfo.exe监听Request并把Request分发到WorkProcess。换句话说,在IIS5.x中对Request的监听和分发是在UserMode中举行,在IIS6中,这类事情被移植到kernelMode中举行,一切的这统统都是经由过程一个新的组件:http.sys来卖力。
注:为了不用户使用程序会见大概修正关头的操纵体系数据,windows供应了两种处置器会见形式:用户形式(UserMode)和内核形式(KernelMode)。一样平常地,用户程序运转在Usermode下,而操纵体系代码运转在KernelMode下。KernelMode的代码同意会见一切体系内存和一切CPU指令。
在UserMode下,http.sys吸收到一个基于aspx的httprequest,然后它会依据IIS中的Metabase检察该基于该Request的Application属于哪一个ApplicationPool,假如该ApplicationPool不存在,则创立之。不然间接将request发到对应ApplicationPool的Queue中。
每一个ApplicationPool对应着一个WorkerProcess:w3wp.exe,毫无疑问他是运转在UserMode下的。在IISMetabase中保护着ApplicationPool和workerprocess的Mapping。WAS(WebAdministrativeservice)依据如许一个mapping,将存在于某个ApplicationPoolQueue的request传送到对应的workerprocess(假如没有,就创立如许一个历程)。在workerprocess初始化的时分,加载ASP.NETISAPI,ASP.NETISAPI进而加载CLR。最初的流程就和IIS5.x一样了:经由过程AppManagerAppDomainFactory的Create办法为Application创立一个ApplicationDomain;经由过程ISAPIRuntime的ProcessRequest处置Request,进而将流程进进到ASP.NETHttpRuntimePipeline。
IIS7的ASP.net哀求处置历程
IIS7站点启动并处置哀求的步骤以下图:
步骤1到6,是处置使用启动,启动好后,今后就不必要再走这个步骤了。
上图的8个步骤分离以下:
1、当客户端扫瞄器入手下手HTTP哀求一个WEB服务器的资本时,HTTP.sys拦阻到这个哀求。
2、HTTP.syscontactsWAStoobtaininformationfromtheconfigurationstore.
3、WAS向设置存储中央哀求设置信息。applicationHost.config。
4、WWW服务承受到设置信息,设置信息指相似使用程序池设置信息,站点设置信息等等。
5、WWW服务利用设置信息往设置HTTP.sys处置战略。
6、WASstartsaworkerprocessfortheapplicationpooltowhichtherequestwasmade.
7、TheworkerprocessprocessestherequestandreturnsaresponsetoHTTP.sys.
8、客户端承受各处理了局信息。
W3WP.exe历程中又是假如处置得呢?IIS7的使用程序池的托管管道形式分两种:典范和集成。这两种形式下处置战略各不相通。
IIS6和IIS7典范形式的托管管道的架构
在IIS7之前,ASP.NET是以IISISAPIextension的体例外加到IIS,实在包含ASP和PHP,也都以不异的体例设置(PHP在IIS接纳了两种设置体例,除IISISAPIextension的体例,也包含了CGI的体例,体系办理者能选择PHP程序的实行体例),因而客户端对IIS的HTTP哀求会先经过IIS处置,然后IIS依据请求的内容范例,假如是HTML静态网页就由IIS自行处置,假如不是,就依据请求的内容范例,分拨给各自的IISISAPIextension;假如请求的内容范例是ASP.NET,就分拨给卖力处置ASP.NET的IISISAPIextension,也就是aspnet_isapi.dll。下图是这个架构的表示图。
IIS7使用程序池的托管管道形式典范形式也是如许的事情道理。这类形式是兼容IIS6的体例,以削减晋级的本钱。
IIS6的实行架构图,和IIS7使用程序池设置成典范形式的实行架构图
IIS7使用程序池的托管管道形式集成形式
而IIS7完整整合.NET以后,架构的处置按次有了很年夜的分歧(以下图),最次要的缘故原由就是ASP.NET从IIS插件(ISAPIextension)的脚色,进进了IIS中心,并且也能以ASP.NET模块卖力处置IIS7的诸多范例请求。这些ASP.NET模块不但能处置ASP.NET网页程序,也能处置其他如ASP程序、PHP程序或静态HTML网页,也由于ASP.NET的诸多功效已成为IIS7的一部分,因而ASP程序、PHP程序或静态HTML网页等范例的请求,也能利用像是Forms认证(FormsAuthentication)或输入缓存(OutputCache)等ASP.NET2.0的功效(但须修正IIS7的设定值)。也由于IIS7同意自行以ASP.NETAPI开辟并到场模块,因而ASP.NET网页开辟职员将更简单扩大IIS7和网站使用程序的功效,乃至能自行以.NET编写办理IIS7的程序(比方以程控IIS7以建置网站或假造目次)。
IIS7的实行架构图(集成托管信道形式下的架构)
小结:
IIS5到IIS6的改善,次要是HTTP.sys的改善。
IIS6到IIS7的改善,次要是ISAPI的改善。
也不知道,我同学昨天说数据挖掘很好。 |
|