Web开发基础务实之《ASP.NET战役完胜表彰晚会(一)》
一、主持人开场白:
1、战斗是辛苦的,同时也是神秘的,战士们是值得人们敬佩的。
2、让我们向那些为ASP.NET战役付出血汗的战士们致敬!同时也向本场晚会的工作者和观众朋友们致敬!
二、用热烈的掌声请他们闪亮登场
首先我们有请驻扎在最前线的调度总指挥:IIS司令
主持人:您好,IIS司令,感谢您在百忙中抽空出席本场晚会!
IIS司令:您好,主持人,周末各大网站的访问量不大,比较闲,前线表示毫无压力,很高兴来到这里,见到主持人很开心,主持人很帅!
主持人:呵呵,多谢夸奖,也就一点点帅啦。对了,IIS司令,据说您是这场ASP.NET战役的总指挥,真是太厉害了。
IIS司令:也谈不上什么总指挥,关键还要靠战士们的智慧和勇猛。而且我仅仅负责作战任务的分配和调度,很多关键的地方还要靠我的几位大 将:ISAPI、w3wp.exe、HttpRunTime、HttpContext、HttpSession、HttpApplication、 HttpModule、HttpHandler等,今天我也把他们带到现场来了,待会可以请他们上来和观众朋友们见见面。
主持人:太好了,每一场胜利的战役背后除了有一个英明的司令员外还有很多勇猛的将军,看来很有道理啊。那好,IIS司令,能否给大家分享一下您是如 何指挥这场ASP.NET战役的,我想在坐的ASP.NET程序员很想听听这方面的经验,尤其是那些初出茅庐的,更要求抱大腿那,嘿嘿,其实本主持也是搞 ASP.NET的~~
IIS司令:OK,看你们那么有诚意,那我就来讲讲吧。基于我的职责,我只能讲讲整场战役的整体规划和作战方向,具体细节待会我的几位大将可以向你们陈述。这个过程中我尽量少说废话,有什么疑问可以随时打断我。
主持人:非常感谢总司令,我们认真听,嘿!下面那位玩dota的程序员,好好听讲了!
一阵热烈的掌声之后............
IIS司令:当上头来指示时,我得先确认指示的类型,由于最近恶搞的指令太多,所以如果我发现是根本子虚乌有的指令,那我就出于礼貌给对方404提 示,接下来就继续边喝我的茶边逛博客园。如果确认指令是正常的,那我就继续看这个指令要我军做什么,如果是要我上报一些战况什么的小事,我就直接写一封 email给上头,如果是分配下来的作战计划和方针,那我就要和我的大将们讨论讨论了,当然先找ISAPI将军。
在坐观众甲:司令您好,我不知道这样理解对不对:当IIS收到一个外部请求时,首先判断请求的资源类型,如果资源是不存在,那就返回404,如果资 源是一些html或图片之类的静态文件,那就直接把文件内容返回,如果是aspx类型的文件,就要从ISAPI那张映射表中找到处理aspx扩展的对应模 块,比如aspnet_isapi.dll。谢谢!
IIS司令:孩子非常聪明,理解非常正确。下面就以处理aspx为例讲下去吧....这时我找来了ISAP将军,让他来帮我参考一下这次任务交给谁 来做比较好,具体怎么实施胜算大。ISAP将军立即拿出他的ASP.NET战役军区的所有将军的资料信息表(IIS中的ISAPI扩展表),看了一下各位 将军的资料和特长后,斩钉截铁的对我说,交给aspnet_isapi.dll吧,他有这方面的作战经验。于是我就把aspnet_isapi.dll请 入帐内,让他讲讲具体的作战方案,很快就有结果了,整体方案如下:
1、首先是将计划宣布给将士们,擂鼓以振士气,并正式启动作战(启动w3wp.exe进程)。
2、布置好作战环境,以占据作战最有利地形(创建ASP.NET的执行容器AppDomain和实例化HttpRunTime对象,即初始化运行环境,将一些必要的dll载入到AppDomain中)。
3、为每一位士兵分配武器装备以更好的战斗,并派遣各部队前往指定地点待命(HttpRuntime将请求转交给HttpApplication,HttpApplication为每一个请求创建HttpContext对象,这些对象主要包含了HttpRequest、HttpResponse、 HttpSessionState等,这些对象在程序中可以通过Page类或者Context类进行访问。)
4、战斗开始,将士们处理各自的战斗事务,包括处理上头下达的临时指示。(HttpApplication逐个处理每个HttpModule,我们可以在这个请求真正被HttpHandler处理之前附加一些需要的信息在这个HTTP请求信息之上,或者针对截获的这个HTTP请求信息作一些额外的工作。)
5、战斗结束,处理战斗结果并向上级汇报(Http请求经过所有的Module之后,它会被HttpHandler处理。在这一步,执行实际的一些操作,通常也就是.aspx页面所完成的业务逻辑。)
大致方案就是这样,下面附上一张作战图(图片来源):
主持人:谢谢,非常感谢IIS司令,经过他的讲解,终于让我知道这场ASP.NET战役是如何获胜的了,也让我明白了ASP.NET的运行机制和原理。
IIS司令:其实这中间还有很多细节没讲,这些细节主持人可以继续采访这场战役中几位功不可没的大将军:ISAPI、w3wp.exe、 HttpRunTime、HttpContext、HttpSession、HttpApplication、HttpModule、 HttpHandler,明天周一了,各大网站的访问量该上来了,得去前线继续调度了,先走一步,再见!
主持人:好的,再次感谢!广告之后下周回来,更多战斗细节有待揭晓,欢迎大家届时继续收看,大家先互相交流着先。
该晚会由青藤屋首播,由博客园同步转播,晚会有不足之处请指出。