怎样获得一个http请求处理的时间
时间计算依据:当HttpApplication事件BeginRequest执行时,我们开始计时,
HttpApplication事件EndRequest执行时,我们计时结束,这一段时间既为一个http请求的处理时间。
我们只要定制自己的一个Module实现自己的两个计时方法,再把它加到HttpApplication的BeginReques
事件代理和BeginRequest代理上就行了。
定制自己的Module(注意当HttpApplication对象创建完后马上会创建Module对象,Module对象的生命周期
为HttpApplication的生命周期)
功能:陷入处理所有应用程序(HttpApplication)事件 包括
1:BeginRequest
2:AuthenticateRequest
3:AuthorizeRequest
4:ResolveRequestCache
5:AcquireRequestState
6:PreRequestHandlerExecute
7:PostRequestHandlerExecute
8:ReleaseRequestState
9:UpdateRequestCache
10:EndRequest
11:Disposed
12:Error
13:PreSendRequestContent
14:PreSendRequestHeaders
定制自己的Module 要实现IHttpModule接口
public interface IHttpModule
{
void Dispose();
void Init(HttpApplication context);
}
代码如下:
using System;
using System.Web;
namespace WebApplication
{
public class RequestTimerModule:IHttpModule
{
public RequestTimerModule()
{
}
#region IHttpModule 成员
public void Init(HttpApplication context)
{
context.BeginRequest+=new EventHandler(this.ModuleBeginRequest);
context.EndRequest+=new EventHandler(this.ModuleEndRequest);
}
public void Dispose()
{
// TODO: 添加 RequestTimerModule.Dispose 实现
}
public void ModuleBeginRequest(Object sender,EventArgs e)
{
HttpApplication ha=sender as HttpApplication;
ha.Context.Items["bTime"]=DateTime.Now;
}
public void ModuleEndRequest(Object sender, EventArgs e)
{
HttpApplication ha=sender as HttpApplication;
DateTime dt=(DateTime)(ha.Context.Items["bTime"]);
TimeSpan span=DateTime.Now-dt;
ha.Response.AddHeader("RequestTiming",span.ToString());
ha.Response.Write(span.ToString());
}
#endregion
}
}
现在我们要把定制的这个Module部署到应用程序中去,我们可以在web.config文件中
添加元素httpModules在system.web元素下,添加部分如下
<system.web>
<httpModules>
<add name="Timer"
type="WebApplication.RequestTimerModule, WebApplication" />
</httpModules>
</system.web>
name 是唯一代表该特定module的字符串,type 是该Module的类型,要包括命名空间,后面的
WebApplication代表该Modlue 的 assembly 名字。