小妖女 发表于 2015-1-16 14:23:01

来一篇关于NET的IIS的外部运转机制

我有个同学,他是搞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的改善。
也不知道,我同学昨天说数据挖掘很好。

透明 发表于 2015-1-16 15:38:40

来一篇关于NET的IIS的外部运转机制

但是java靠开源打出的一片天地,特别是在微软的垄断下能打开今天的局面还是有它的生命力的。

山那边是海 发表于 2015-1-18 18:11:17

ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码。

海妖 发表于 2015-1-27 15:30:24

业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。

admin 发表于 2015-2-5 14:10:57

众所周知,Windows以易用而出名,也因此占据不少的服务器市场。

兰色精灵 发表于 2015-2-12 04:55:01

目前在微软的.net战略中新推出的ASP.net借鉴了Java技术的优点,使用CSharp(C#)语言作为ASP.net的推荐语言,同时改进了以前ASP的安全性差等缺点。但是,使用ASP/ASP.net仍有一定的局限性,因为从某种角度来说它们只能在微软的WindowsNT/2000/XP+IIS的服务器平台上良好运行(虽然像ChilliSoft提供了在UNIX/Linux上运行ASP的解决方案.

简单生活 发表于 2015-3-2 23:39:26

微软又推出ASP.NET。这不是ASP的简单升级,而是全新一代的动态网页实现系统,用于一台WEB服务器建立强大的应用程序。是微软发展的新体系结构.NET的一部分,是ASP和.NET技术的结合。

小妖女 发表于 2015-3-11 07:46:22

可以通过在现有ASP应用程序中逐渐添加ASP.NET功能,随时增强ASP应用程序的功能。ASP.NET是一个已编译的、基于.NET的环境,可以用任何与.NET兼容的语言(包括VisualBasic.NET、C#和JScript.NET.)创作应用程序。另外,任何ASP.NET应用程序都可以使用整个.NETFramework。开发人员可以方便地获得这些技术的优点,其中包括托管的公共语言运行库环境、类型安全、继承等等。

仓酷云 发表于 2015-3-17 23:48:58

ASP.net的速度是ASP不能比拟的。ASP.net是编译语言,所以,当第一次加载的时候,它会把所有的程序进行编译(其中包括worker进程,还有对语法进行编译,形成一个程序集),当程序编译后,执行速度几乎为0。

精灵巫婆 发表于 2015-3-25 09:29:13

那么,ASP.Net有哪些改进呢?
页: [1]
查看完整版本: 来一篇关于NET的IIS的外部运转机制