8

我已经阅读了关于 Asp.Net 页面生命周期的精美文章http://www.codeproject.com/Articles/73728/ASP-NET-Application-and-Page-Life-Cycle

我的理解是请求通过 MODULE(BeginRequest,authentica,author,prehandler...) HANDLER(Proccessrequest) PAGE(Init,viewstate,load,render,......,unload) MODULE(Posthandler,postrequescache,Endreques )。

Global.asax(Application_start,Application_begin,....) 在上面的流程中到底在哪里?澄清这一点真的会有所帮助

初始化函数是先调用还是 Global.asax 函数?

感谢您宝贵的时间。

4

3 回答 3

13

IIS 中的 ASP.NET 应用程序的结构如下图所示。我知道这可能看起来很吓人,但名字听起来应该很熟悉。希望熟悉的名字使它更容易消化。

我不会用文字重复你在下面看到的结构。这张照片比我用句子说的要好。相反,我将直接讨论该图像对您的问题的影响。

可怕的东西

应用域
什么是应用域?它作为应用程序的系统内存的私有分配。域内的所有代码都使用分配的域内存。这意味着静态类型和引用在域中共享。域外的任何代码都不能访问该域的内存。

每个ASP.NET 应用程序都在它所属的每个应用程序池的应用程序域内运行。无论应用程序池中的线程数如何,这种一对一的关系都成立。

Global.asax
什么是 Global.asax?在最简单的情况下,它是一个继承自System.Web.HttpApplication的 .NET 类。HttpApplication为 Global.asax 提供了通过请求管道引导所有 HTTP 请求的智能。它将触发所有请求生命周期事件并在处理程序上调用 ProcessRequest。

每个ASP.NET 应用程序都会创建多个HttpApplication (Global.asax) 实例。当收到请求时,它将被交给HttpApplication实例之一。然后,该请求将在其生命周期内保持相同的HttpApplication实例。这意味着每个正在处理的请求都有一个HttpApplication实例。每个HttpApplication实例都可以并且将在其生命周期内被重用于处理许多请求。

应用
程序事件 Application_Start 之类的应用程序事件在哪里关联?这取决于,因为其中一些事件是指 App Domain 而一些是HttpApplication。Application_Start 和 Application_End 指的是 App Domain 的开始和结束。其余的应用程序事件(例如 Application_Begin)指的是HttpApplication实例的生命周期。

更多信息
有关更多信息,我建议阅读这篇MSDN 文章和这篇非 MSDN 文章。

于 2013-07-03T14:41:05.507 回答
1

asp.net 应用程序生命周期事件关注 global.asax。页面生命周期有它自己的事件。在这里阅读更多:

http://msdn.microsoft.com/en-us/library/ms178473.aspx

于 2012-11-11T13:35:27.627 回答
1

HTTP 模块与 Global.asax 文件

您可以在应用程序的 Global.asax 文件中实现模块的大部分功能,这使您能够响应应用程序事件。但是,与 Global.asax 文件相比,模块的优势在于它们被封装并且可以创建一次并在许多不同的应用程序中使用。通过将它们添加到全局程序集缓存 (GAC) 并在 Machine.config 文件中注册它们,您可以跨应用程序重用它们。有关详细信息,请参阅全局程序集缓存。但是,使用 Global.asax 文件的优点是您可以将代码放置在其他已注册的模块事件中,例如 Session_Start 和 Session_End 方法。此外,Global.asax 文件使您能够实例化在整个应用程序中可用的全局对象。每当您需要创建依赖于应用程序事件的代码并且您希望在其他应用程序中重用该模块或者您不想将复杂代码放在 Global.asax 文件中时,您都应该使用模块。当您需要创建依赖于应用程序事件的代码并且不需要跨应用程序重用它时,或者当您需要订阅诸如 Session_Start 等模块不可用的事件时,您应该将代码放在 Global.asax 文件中。

HTTP 模块简介

于 2017-02-06T07:59:32.503 回答