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

标签 asp.net httphandler httpmodule global-asax

我读过关于 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,....) 到底来自哪里?弄清楚这一点确实有帮助

Init 函数首先调用还是 Global.asax 函数?

感谢您宝贵的时间。

最佳答案

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

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

Scary Stuff

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

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

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

每个ASP.NET application将创建 HttpApplication 的多个实例(全局.asax)。当收到请求时,它将被交给 HttpApplication 之一实例。然后,请求将保持不变 HttpApplication实例的生命周期。这意味着有一个 HttpApplication每个正在处理的请求的实例。每HttpApplication实例可以并且将会在其生命周期内被重用来处理许多请求。

应用程序事件
像 Application_Start 这样的应用程序事件在哪里关联?这取决于这些事件,其中一些事件涉及应用程序域,一些事件涉及 HttpApplication 。 Application_Start 和 Application_End 指的是应用程序域的开始和结束。其余的应用程序事件(例如 Application_Begin)是指 HttpApplication 的生命周期。实例。

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

关于asp.net - HTTPModules 和 Global.asax -- ASP.NET 页面生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13319996/

相关文章:

asp.net - IIS,拒绝访问静态文件;这个例子有什么问题吗?

c# - RegularExpressionValidator 正则表达式用于验证多行文本框中的 IP(每行一个)?

c# - 从 webapi 中的 async DelegatingHandler 读取异步响应内容时出现死锁

asp.net - LocalSystem 与 System 与 Local System Windows 系统帐户

asp.net - 服务器控件和 MVC

javascript - 从 JavaScript 发送消息到处理程序

c# - 使用 IIS 的通用处理程序解析错误

c# - 友好的 URL 与丑陋的查询字符串 URL SharePoint、HTTPModule?

c# - 用于自定义身份验证的 HttpModule 将如何与 Windows 身份验证交互?

SEO 和带有动态 URL 的硬链接(hard link)