HttpApplication

  HttpApplication 是整个ASP.NET 基础架构的核心,它负责处理分发给它的HTTP 请求。由
于一个HttpApplication 对象在某个时刻只能处理一个请求,只有完成对某个请求的处理后才能
用于后续的请求处理,所以ASP.NET 采用对象池的机制来创建或获取HttpApplication 对象。

  当第一个请求抵达时,ASP.NET 会一次创建多个HttpApplication 对象,并将其置于池中,
然后选择其中一个对象来处理该请求。处理完毕后,HttpApplication 不会被回收,而是释放
到池中。对于后续的请求,空闲的HttpApplication 对象会从池中取出。如果池中所有的
HttpApplication 对象都处于繁忙的状态,在没有超出HttpApplication 池最大容量的情况下,
ASP.NET 会创建新的HttpApplication 对象,否则将请求放入队列等待现有HttpApplication 的
释放。
HttpApplication 处理请求的整个生命周期是一个相对复杂的过程,在该过程的不同阶段
会触发相应的事件。我们可以注册相应的事件,将处理逻辑注入到HttpApplication 处理请求
的某个阶段。表1-1 按照实现的先后顺序列出了HttpApplication 在处理每一个请求时触发的
事件名称。

 

对于一个ASP.NET 应用来说,HttpApplication 派生于Global.asax 文件,我们可以通过创
建Global.asax 文件对HttpApplication 的请求处理行为进行定制。Global.asax 采用一种很直接的
方式实现了这样的功能,这种方式不是我们常用的方法重写或事件注册,而是直接采用方法名
匹配。在Global.asax 中,我们按照“Application_{Event Name}”这样的方法命名规则进行事
件注册。比如Application_BeginRequest 方法用于处理HttpApplication 的BeginRequest 事件。
如果通过VS 创建一个Global.asax 文件,将采用如下的默认定义。

<%@ Application Language="C#" %>
<script runat="server">
void Application_Start(object sender, EventArgs e){}
void Application_End(object sender, EventArgs e){}
void Application_Error(object sender, EventArgs e){}
void Session_Start(object sender, EventArgs e){}
void Session_End(object sender, EventArgs e){}
</script>

  

posted @ 2015-10-15 16:47  KeyonJin  阅读(204)  评论(0)    收藏  举报