2012-11-10 223 views
4

我已阅读关于Asp.Net页面生命周期http://www.codeproject.com/Articles/73728/ASP-NET-Application-and-Page-Life-Cycle的美丽文章。HTTPModules和Global.asax - ASP.NET页面生命周期

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

Global.asax(Application_start,Application_begin,....)到底在哪里?对此的清晰度将确实有助于

Init函数是否调用first或Global.asax函数?

感谢您宝贵的时间。

+0

您是否仍然有兴趣回答您的问题?我知道这已经过去了几个月。 –

+0

@Mark继续。 – Peru

+0

很酷,今天晚些时候我会收集我的想法,我会写一个。 –

回答

11

在IIS中的ASP.NET应用程序的构成就像我下面的图像。我知道这可能是可怕的,但名字应该听起来很熟悉。希望熟悉的名字使它更容易消化。

我不会用言语重温你在下面看到的结构。照片做得更好,然后我可以用句子来说。相反,我会直接跳到图像对您的问题的影响。

Scary Stuff

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

每个ASP.NET application都在其所属的每个应用程序池的应用程序域内运行。无论应用程序池中的线程数如何,此一对一关系都适用。

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

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

Aplication活动
哪里像领带的Application_Start应用程序事件?这取决于一些事件涉及应用程序域,有些涉及到HttpApplication。 Application_Start和Application_End指的是应用程序域的开始和结束。应用程序事件的其余部分(例如Application_Begin)指的是一个HttpApplication实例的生命周期。

更多信息
欲了解更多信息,我建议this MSDN文章和this非MSDN文章。

0

HTTP模块对的Global.asax文件

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

Introduction to HTTP Modules