使用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)

转载于:https://www.cnblogs.com/netboy/archive/2007/05/25/759654.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HttpSelfHostServer是一个类,可用于在自托管的环境中提供Web API服务。以下是使用HttpSelfHostServer的基本步骤: 1. 创建一个实现了ApiController的控制器类 2. 在控制器类中编写一些操作方法(Action),用于处理客户端请求 3. 在Global.asax.cs文件中注册HttpSelfHostServer 4. 启动HttpSelfHostServer 以下是示例代码: ```csharp // 控制器类 public class MyController : ApiController { public string Get() { return "Hello World!"; } } // Global.asax.cs文件 public class WebApiApplication : System.Web.HttpApplication { protected void Application_Start() { // 注册HttpSelfHostServer HttpSelfHostConfiguration config = new HttpSelfHostConfiguration("http://localhost:8080"); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); HttpSelfHostServer server = new HttpSelfHostServer(config); server.OpenAsync().Wait(); } } ``` 在上面的示例中,我们创建了一个名为MyController的控制器类,并实现了一个Get方法,用于返回“Hello World!”字符串。在Global.asax.cs文件中,我们创建了一个HttpSelfHostConfiguration实例,并将其绑定到“http://localhost:8080”地址。然后我们使用MapHttpRoute方法将路由映射到控制器和操作方法。最后,我们创建了一个HttpSelfHostServer实例,并调用其OpenAsync方法启动服务。 此时,您可以通过访问“http://localhost:8080/api/my”来测试API服务,如果一切正常,您将看到“Hello World!”字符串。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值