ASP.NET页面生命周期

webform,前一份工作只有管理后台用到,如果说,我对它的掌握程度如何,9个字概括:有接触,能理解,可以做。但是与一群前同事交流时,他们都说面试官好喜欢问asp.net页面生命周期、mvc原理什么鬼。如果,人家问我,我是否能够做到侃侃而谈?还是先静下心来学习学习吧。

以下内容,均摘自网络文章,如有雷同,纯属巧合。我只是想做个笔记,方便日后查看。

一、基本概念

http.sys,是操作系统的核心组件,能够让任何应用程序通过它提供的接口,以http协议进行信息通讯。

好处:

缓存。静态的内容现在被缓存于内核模式下,使服务响应速度更快。

日志。iis的log功能更快且标准化了。

带宽控制。

可靠性。所有服务请求会在http.sys里暂存队列,而不是由服务程序本身来处理,这样,即使服务程序重启,尚未被处理的请求也不会丢失。

ip端口重用。只要是通过http.sys管理的端口(比如80),都可以同时运行多个程序同时监听。

http.sys可以将请求进行缓存,并尽可能地在内核模式中完成对请求的服务。如果某个请求的响应已经得到了缓存,那么iis就无需重新处理这个请求,http.sys只需要将这个响应从缓存中取出,这样就绕开了所有的iis功能。这些已缓存的请求都保存在内存中,并且不允许换出,因此,尽可能地增大系统内存是提高iis性能的一种简单有效的方法。

http.sys还可以将请求进行排队,由合适的工作进程完成对请求的服务。每个应用程序池都拥有自己的队列,队列的规模是可以配置的,这样,我们可以对某个具体应用程序池的性能进行调优。针对可能会发生失效的应用程序,使用队列还有另一个优点,就是针对失效应用程序的请求仍然会保存在队列中,直到队列中保存的请求总数达到该队列的上限。当应用程序能够重新进行响应时,这些请求仍然能够得到处理;此外,通过自动重启发生失效的应用程序池,还能够降低响应时间,从用户看来,应用程序的响应仅仅是稍微延迟了一点。

应用程序applicationasp.net将应用程序定义为所有文件、页、处理程序、模块和可执行代码的总和。

应用程序域application domain,是一个应用程序执行的独立环境,为执行托管代码提供隔离、卸载和安全边界。一个应用程序域可以装载一个可执行程序(.exe)或者多个程序集(.dll)。

应用程序池application pool,iis6可以将单个web应用程序或多个站点分隔到一个独立的进程(应用程序池),可以包含许多个应用程序域。应用程序池以独立进程的方式极大的提高了web服务器的安全和稳定性。

工作者进程worker process,为应用程序池提供服务,一个应用程序池可以运行一个或者多个worker process。worker process实际上是w3wp.exe运行时所产生的一个进程。

集成模式与经典模式区别

如果是iis7的集成模式,则使用托管程序System.Web.UI.PageHandleFactory来响应针对.aspx请求。

如果是iis7的经典模式以及iis6,则使用aspnet_isapi.dll(非托管)来响应请求。

二、图解请求/响应

图片画得有点粗糙,纯属个人目前理解,在此不谈正确与否。哈哈。

ASP.NET页面生命周期

参考:

ASP.NET应用程序和页面生命周期

用三张图片详解Asp.Net 全生命周期