手机版

IIS处理Asp.net请求和Asp.net页面生命周期的详细描述

时间:2021-10-11 来源:互联网 编辑:宝哥软件园 浏览:

当ASP.NET运行时,页面将经历一个生命周期,在此期间将执行一系列处理步骤。这些步骤包括初始化、实例化控件、恢复和维护状态、运行事件处理程序代码和呈现。了解页面生命周期非常重要,因为通过这样做,您可以在生命周期的适当阶段编写代码,以达到预期的结果。此外,如果要开发自定义控件,必须熟悉页面生命周期,这样才能正确初始化控件,用视图状态数据填充控件属性,并运行任何控件行为代码。(控件的生命周期基于页面的生命周期,但是页面引发的控件事件比单独的ASP.NET页面中的更多。一般来说,一个页面会经历下表中列出的各个阶段。除了页面生命周期阶段之外,在请求之前和之后还有应用程序阶段,但是这些阶段不是特定于页面的。(有关更多信息,请参见MSDN:ASP.NET应用程序生命周期概述。)9500.163.com

我们知道,我们最终在服务器上创建的Page对象是由Page的一个派生类创建的,这个派生类通常是不可见的,包括类名,我们并没有直接指定。这个类是由ASP.NET服务器根据我们的页面模板文件aspx创建的,页面对象的ProcessRequest方法将启动页面生成过程。这个过程是通过页面的处理管道完成的。下表列出了最常用的页面生命周期事件。除列出的事件外,还有其他事件;然而,大多数页面处理方案不使用这些事件。它主要由ASP.NET网页上的服务器控件用来初始化和呈现它们自己。如果您想编写自己的ASP.NET服务器控件,您需要详细了解这些阶段。(有关创建自定义控件的信息,请参见MDDN:开发自定义ASP.NET服务器控件。)9501.163.com

注意(来自MSDN):每个ASP.NET服务器控件都有自己的生命周期,类似于页面生命周期。例如,控件的初始化和加载事件发生在相应的页面事件期间。尽管Init和Load都在每个控件上递归发生,但它们的发生顺序相反。每个子控件的Init事件(和Unload事件)发生在为其容器引发相应事件之前(从底部到顶部)。但是,容器的加载事件发生在其子控件的加载事件之前(从上到下)。您可以通过处理控件的事件来自定义控件的外观或内容,例如按钮控件的单击事件和列表框控件的SelectedIndexChanged事件。在某些情况下,您可能还需要处理控件的数据绑定或数据绑定事件。有关更多信息,请参见单个控件和开发自定义ASP.NET服务器控件的类参考主题。从Page类继承类时,不仅可以处理该页引发的事件,还可以重写该页基类中的方法。例如,您可以重写页面的InitializeCulture方法来动态设置区域性信息。请注意,当使用Page_ event语法创建事件处理程序时,会隐式调用基实现,因此没有必要在方法中调用它。例如,无论是否创建了Page_Load方法,总是调用Page基类的OnLoad方法。但是,如果使用重写关键字(在Visual Basic中为重写)重写页面的OnLoad方法,则必须显式调用基方法。例如,如果在页面中重写OnLoad方法,则必须调用base。加载(MyBase。在Visual Basic中加载)来运行基础实现。首先,当IIS处理Asp.net请求时,我们需要理解两个非常重要的概念:1。Workerprocess (w3wp.exe)。Workerprocess管理来自客户端的所有请求并给出响应。它是IIS下ASP.NET应用的核心。2、应用池。它是工作进程的容器,IIS5之前的IIS版本没有应用池的概念。每个应用程序池对应一个工作进程,它保护IIS元数据库中应用程序池和工作进程之间的映射。因此避免了工作进程(IIS5中的aspnet_wp.exe,一次只能运行一个进程)崩溃,应用完全崩溃的情况。客户端向IIS发送资源请求后发生了以下情况:1。服务器接受了请求,IIS6通过HTTP将每个请求分发到应用程序池。系统处于内核模式。这不是一个随机的过程。应用程序池已通过HTTP注册。SYS,所以当请求到来时,HTTP。系统将被直接发送到相应的应用程序池。然后,在IIS的用户模式下,网络管理服务从HTTP获取请求。并将其分发到应用程序池。应用程序池直接将请求传递给工作进程。2.将请求传递给工作进程后,工作进程初始化并加载ASP.NET(internet server应用程序接口),然后ASP.NET isapi加载CLR以创建托管环境。(注意:ISAPI只是一个接口,充当代理,主要功能是根据Request URL的后缀找到后缀的处理程序。)ASP.NET ISAPI是在aspnet_isapi.dll中定义的,它在非托管环境中运行。ASP.NET的Isapi启动一个HttpRuntime,HttpRuntime调用ProcessRequest方法开始处理请求。根据ISAPI的iWRType,ProcessRequest创建了不同的HttpWorkerRequest,从而屏蔽了不同IIS之间的差异。接下来,ProcessRequest方法创建一个HTTPContext,我们使用HttpContext。当前访问它。在HttpRuntime使用HttpApplicationFactory创建HttpApplication对象(ihtthandler)后,所有的请求都会在经过httpmodule后找到对应的Httphandler进行处理。

在HttpApplicationFactory创建HttpApplication之前,它会找到所有在config(web.config和Machine.config)文件中注册的httpmodule,根据配置信息加载相应的Assembly,并通过Reflection创建相应的httpmodule。并将这些模块添加到http应用程序的_moduleCollection文件中。我们对应用程序的请求最终将落在一个HttpApplication对象上。当请求到来时,ASP.NET将在应用程序池中寻找未使用的应用程序对象。3.在请求通过HTTP管道之后,每个请求被发送到相关的各自的httphandler,IIS请求处理过程结束。HttpHandler是HTTP管道的端点,它为每个请求生成输出。系统。网页就是这样一个典型的Httphandler。当我们请求一个aspx页面时,这个HttpHandler生成html并将其发送回客户端。查看Page类的签名:public class Page:模板控件,iHttpHandler {},可以看到Page类是一个HttpHandler。综上所述,整个过程是:当客户端向服务器发送资源请求时,请求首先到达HTTP。IIS的SYS。然后是HTTP。系统发送对应于请求通道的应用程序池。然后应用程序池向W3WP.exe发送一个请求来加载ISAPI扩展,ISAPI创建一个HttpRuntime对象,通过HttpModule和HttpHandler处理该请求。然后页面生命周期开始。4.页面生命周期的开始页面生命周期的主要阶段包括:页面初始化(Init):服务器创建一个服务器控件实例(load):控件实例被加载到它定义的页面对象中,预输出:(PreRender)对控件的更改被更新并准备输出。保存视图状态保存:控件的状态信息。Render):服务器为控件创建html标记。dispose):的主要工作是dispose,关闭数据库连接,释放文件资源等。卸载:销毁服务器控件实例页生命周期的主要事件:PreInit: 1。请检查IsPostBack属性2。动态设置母版页3。动态设置主题4。设置控件的默认值(UniqueId等)。) 5.重新创建动态控件(初始化控件)并初始化控件值Init:此事件发生在初始化所有控件并应用所有外观设置之后。它用于读取或初始化控件属性。它可以用来注册一些在aspx页面中没有指示的控件的事件。Init complete:使用此事件处理需要完成所有初始化的任务。preload :加载页面和所有控件的ViewState,然后处理Request实例中包含的所有回发数据。Load:事件可能是大家最熟悉的。请注意,Page对象将递归调用子控件的onload事件,直到加载该页和所有子控件。此事件主要用于设置控件属性的值并建立数据库连接(通常不这样做)。控制事件:主要用于处理点击等控制事件。这使我们明白,每次单击按钮时,我们实际上都必须在执行单击事件之前执行加载事件。一般我们用!IsPostBack进行判断,以避免不必要的加载逻辑。在LoadComplete:页面上,所有的控件都被加载并执行了,我暂时还没有想到要做什么。这是生成HTML之前的最后一个事件。页面中的每个控件都有一个PreRender过程。这里,修改最后一次输出的HTML结果。SaveStateComplete:在此之前已经保存了所有控件和页面,对页面或控件的任何更改都不会左右移动。我暂时不知道该怎么办。Render:它不是一个事件,而是一个方法。工作是将HTML写回客户端浏览器。卸载:页面中的每个控件都会发生这种情况。在控件中,使用此事件进行清理,例如关闭数据库连接。

清理页面本身,例如关闭打开的文件和数据库连接,或者结束日志或其他指定的工作。需要注意的是,每个Request都会创建一个全新的Page类实例,所以页面中自己定义的字段不能在两个Request中传递值,需要使用viewstate进行存储。5.HttpHandler根据页面生命周期中事件的处理将结果发送回IIS,IIS将结果发送回客户端浏览器。值得注意的是,在这个过程中,请求将再次通过HttpModule(注册一个EndRequest事件)。至此,整个请求结束。

版权声明:IIS处理Asp.net请求和Asp.net页面生命周期的详细描述是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。