使用HttpApplication实例(翻译)

使用HttpApplication实例

在应用程序的整个生命周期,ASP.NET都会维护一个由Global.asax派生(Global.asax-derived)出来的HttpApplication实例的池.当应用程序接到一个http请求,asp.net页面框架就会指派其中的一个HttpApplication实例来处理请求.这个特定的HttpApplication实例会负责管理这个请求的整个生命周期.这个实例也只能在当前请求完成后才可以被重用.通过HttpApplication类你可以通过编程的方式来访问HttpApplication.InitHttpApplication.Dispose 方法以及Application_OnStart Application_OnEnd 事件,并且你可以访问HttpModule的一些公开事件.(:msdnIHttpModule相关文档中可以看到这个接口只有两个公开的方法接口一个是Dispose另一个是Init.)

重写InitDispose方法

HttpApplication.Init 方法在创建一个HttpApplication类的新实例后马上就触发.你可以使用这个方法来创建和配置任何你想在所有处理事件(l handling events)中使用的对象,看下面的代码实例.

[Visual Basic]

<script language="VB" runat="server">
 Public Overrides Sub Init()
'Insert something interesting here.
 End Sub
</script>

[C#]
<script language="C#" runat="server">
public override void Init()
 {
 // Insert something interesting here.
}
</script>

Init方法和Application_OnStart事件是不同的,因为在应用程序的所有HttpApplication实例都会调用它.Application_OnStart在应用程序的整个生命周期中只触发一次,也就是在第一个HttpApplication实例创建的时候触发.Application_OnStart只是用来创建或者修改所有管道实例(pipeline instances)共享的状态,比如使用ApplicationState对象.不用使用它创建局部变量,因为局部变量不能被多个HttpApplication实例共享. HttpApplication.Dispose 方法在一个HttpApplication类的实例被销毁的时候马上触发.它可以用来清理任何本地资源(local resources). Dispose方法和Application_OnEnd事件也不相同,因为它可以被整个应用程序中所有的HttpApplication实例调用. Application_End在整个应用程序的生命周期中只调用一次,也就是在最后一个HttpApplication实例被销毁的时候触发. Application_OnEnd只能用来清理被所有管道实例共享的状态或者资源.,比如ApplicationState对象.不要用它来清理局部变量,因为局部变量并不是被多个HttpApplication共享的.你不能使用在InitDispose中使用HttpApplication实例的Request, Response, Session .

下面的例子演示了如何重写由HttpApplication基类提供的这两个生命周期方法(two life cycle methods).

 [Visual Basic]

<script language="VB" runat=server>
Public Overrides Sub Init()
 ' Init override code goes here.
End Sub

Public
Overrides Sub Dispose()
' Init override code goes here.
End Sub
</script>

[C#]
<script language="C#" runat=server>
public override void Init()
{
// Init override code goes here.
}

public override void Dispose()
{
// Init override code goes here.
}
</script>

处理HttpApplication的事件

你可以使用Global.asax文件同步由HttpApplication 基类提供得任何事件.要实现这个,你必须使用下面的命名模式来书写一个方法.

Application_EventName(AppropriateEventArgumentSignature)

例如,如果你想让代码对应用程序中的OnStart, BeginRequest, OnEnd事件做出响应.Global.asax文件中的代码看起来是这样的.

[Visual Basic]

<Script language="VB" runat="server">
Sub Application_OnStart()
'Application start-up code goes here.
End Sub

Sub Application_BeginRequest()
'Application code for each request could go here.
End Sub

Sub
Application_OnEnd()
'Application clean-up code goes here.
End Sub
</script>

[C#]
<Script language="C#" runat="server">
public void Application_OnStart()
{
// Application start-up code goes here.
}

public
void Application_BeginRequest()
{
// Application code for each request could go here.
}

public
void Application_OnEnd()
{
// Application clean-up code goes here.
}
</script>

阅读原文(Working with HttpApplication instances)

posted on 2007-05-25 13:25 zhanqiangz(闲云野鹤) 阅读(591) 评论(0)  编辑 收藏 所属分类: 翻译ASP.NET2.0


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
 
另存  打印
 


<2007年5月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

公告

如转载本博客的相关资料敬请注明出处.谢谢合作!

与我联系

常用链接

留言簿(6)

我参与的团队

我的标签

随笔分类(51)

随笔档案(49)

文章分类(7)

文章档案(5)

收藏夹(3)

.NET

BizTalk

Design

JavaScript

My Blogs

Power Tools

Process Control

Search Engine

SQL Server

XML

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜