HTTPModules和Global.asax--ASP.NET页面生命周期

HTTPModules和Global.asax--ASP.NET页面生命周期,asp.net,httphandler,httpmodule,global-asax,Asp.net,Httphandler,Httpmodule,Global Asax,我读了一篇关于Asp.Net页面生命周期的漂亮文章 我的理解是,请求通过模块(BeginRequest、authentica、author、prehandler…)处理程序(ProcessRequest)页面(初始化、查看状态、加载、呈现、卸载)模块(Posthandler、postrequescache、Endreques) Global.asax(Application_start,Application_begin,…)在上述流程中的具体位置?澄清这一点确实会有所帮助 Init函数调用的是

我读了一篇关于Asp.Net页面生命周期的漂亮文章

我的理解是,请求通过模块(BeginRequest、authentica、author、prehandler…)处理程序(ProcessRequest)页面(初始化、查看状态、加载、呈现、卸载)模块(Posthandler、postrequescache、Endreques)

Global.asax(Application_start,Application_begin,…)在上述流程中的具体位置?澄清这一点确实会有所帮助

Init函数调用的是first还是Global.asax函数


感谢您的宝贵时间。

asp.net应用程序生命周期事件请注意global.asax。页面生命周期有自己的事件。请在此处阅读更多信息:


IIS中的ASP.NET应用程序的结构与下面的图片类似。我知道它看起来可能很吓人,但名字听起来应该很熟悉。希望熟悉的名字能让它更容易消化

我不会用文字重复你在下面看到的结构。这幅画比我用句子表达的效果更好。相反,我将直接跳到这张图片对您的问题的影响

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

每个应用程序在其所属的每个应用程序池的应用程序域内运行。无论应用程序池中的线程数是多少,这种一对一关系都成立

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

每个将创建(Global.asax)的多个实例。当收到请求时,它将被交给其中一个实例。然后,请求将在其生存期内与同一实例保持一致。这意味着每个正在处理的请求都有一个实例。每个实例都可以并且将被重用,以在其生命周期内处理许多请求

应用事件
应用程序事件(如Application_)从何处开始连接?这要视情况而定,因为其中一些事件涉及应用程序域,而另一些事件涉及应用程序域。应用程序开始和应用程序结束是指应用程序域的开始和结束。其余的应用程序事件(例如Application_Begin)指的是实例的生命周期

更多信息

有关更多信息,我建议使用MSDN文章和非MSDN文章。

HTTP模块与Global.asax文件的比较

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


您是否仍有兴趣回答您的问题?我知道已经几个月了。好吧,今天晚些时候我整理好我的想法后再写一篇。