.NET (C#) Internals: ASP.NET 应用程序与页面生命周期(意译)
1、引言
2、两个处理步骤
2.1、创建ASP.NET环境
2.2、用触发的MHPM事件处理请求
3、什么事件中应该做什么
4、示例代码
5、深入ASP.NET页面事件
1、引言
这篇文章我们将试图理解,从用户发送一个请求直到请求呈现到浏览器发生的事件的差异。因此,我们首先将介绍解ASP.NET请求的两个概括的步骤,接下来我们将介绍‘HttpHandler’,
‘HttpModule’和ASP.NET页面对象发出的事件的差异。随着我们的事件旅程,我们将理解这些事件的逻辑。
2、两个处理步骤
ASP.NET请求处理可以总结为如下所示的两个处理步骤。用户发送一个请求到IIS:ASP.NET创建处理请求的环境。换句话说,创建应用程序对象、request、response和context对象去处理请求。
一旦环境已经创建,请求通过使用modules、handlers和page对象的一系列事件处理。为了简化可以称为MHPM(module、handler、page、module event),我们将在后面详细讨论。
图1、ASP.NET请求处理的两个步骤
在接下来的各节,我们将知道更多关于这两个步骤的细节。
2.1、创建ASP.NET环境
step 1:用户发送一个请求到IIS。IIS首先检查哪个ISAPI扩展可以处理这个请求,这取决于请求的文件扩展名。举例来说,如果请求页面是‘.ASPX’,它将被传送到‘aspnet_isapi.dll’来处理。
step 2:如果这是www站点的第一个请求,ApplicationManager类将创建一个应用程序域,www站点运行于其中。我们都知道在同一个IIS上,两个web应用程序的应用程序域是独立的(隔离的)。因此一个应用程序域中问题不会的影响到其它应用程序域。
step 3财报asp是什么意思:新建的应用程序域创建宿主环境,如HttpRuntime对象。一旦宿主环境被创建,必要的ASP.NET核心对象如HttpContext、HttpRequest和HttpRespone对象也被创建。
step 4:一旦所有的ASP.NET核心对象被创建,HttpApplication对象将被创建去处理请求。如果系统中有global.asax文件,global.asax文件对象将被创建。
【注意】:global.asax文件继承自HttpApplication类;第一次ASP.NET页面连接到应用程序,一个HttpApplication新实例将被创建。为了最大化性能,HttpApplication实例可能被多个请求重用。
step 5:接下来HttpApplication对象分配给核心ASP.NET对象来处理页面。
step 6:然后HttpApplication通过HttpContext、HttpRequest和HttpRespone事件开始处理请求。它触发MHPM事件处理请求。【更多细节】:msdn.microsoft/en-us/library/ms178473.aspx
图2
、创建ASP.NET环境
下图解释了ASP.NET请求的内部对象模型。最高层是ASP.NET运行时,它已经创建一个应用程序域(AppDomain),相应地有HttpRuntime包括request、respone、context对象。
图3、ASP.NET请求的内部对象模型
2.2、用触发的MHPM事件处理请求
一旦创建了HttpApplication,它开始处理请求,它经历3个不同的部分HttpModule、Page、HttpHandler。随着它移动到这些部分,将调用不同的事件,开发人员可以扩展和定制同一逻辑。在我们前进之前让我们了解什么是HttpModule和HttpHandlers。他们帮组我们在ASP.NET页处理的前后注入自定义逻辑。他们之间的主要差别是:
(1)如果你想要注入的逻辑是基于像‘.ASPX’、‘.HTML’这样的文件扩展名,使用HttpHandler。换句话说HttpHandler是基于处理器的扩展。
(2)如果你想在ASP.NET管道事件中注入逻辑,使用HttpModule。换言之是基于处理器的事件。
你可以点这了解他们之间更多的差异。下面是怎样处理请求的逻辑流。有四个重要的步骤MHPM,解释如下:
Step 1(M HttpModule):客户端请求处理开始。ASP.NET引擎开始和创建HttpModule
发出事件(你可以注入定制逻辑)之前,有6个重要事件你可以使用:BeginRequest、AuthenticateRequest、AuthorizeRequest、ResolveRequestCache、AcquireRequestState和PreRequestHandlerExecute。
Step 2(H HttpHandler):一旦上面6个事件触发,ASP.NET引擎将调用ProcessRequest事件,即使你已经在项目中执行了HttpHandler。
Step 3(P ASP.NET page):一旦HttpHandler逻辑执行,ASP.NET page对象被创建。ASP.NET page对象被创建,许多事件被触发,你可以在这些页面事件中写我们自定义的逻辑。有6个重要事件给我们提供占位,在ASP.NET页中写逻辑:Init、Load、Validate、Event、Render、Unload。你可以记住单词SILVER来记这些事件,S-Start(没有任何意义,仅仅是为了形成一个单词),I(Init)、L(Load)、V(Validate)、E(Event)、R(Render)。
Step 4(M HttpModule):一旦页面对象执行了且从内存中卸载,HttpModule提供发送页面执行事件,它们可用于注入自定义post-处理逻辑。有4个重要的post-处理事件,PostRequestHandlerExecute、PostRequestState、UpdateRequestCache、EndRequest。
下图展示了上面的过程。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论