以下是我正在处理的HttpModule的完整源代码。 如您所见,我记录 BeginRequest 事件期间的时间,将其存储在私有字段中,并计算 EndRequest 事件期间的已用时间。
我可以安全地假设在EndRequest事件触发之前,_RequestStart字段不会被另一个请求覆盖吗? asp.net是否使用此HttpModule的相同实例来为多个同时请求提供服务?
public class TimingModule : IHttpModule
{
private DateTime _RequestStart;
public void Dispose() {}
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(OnBeginRequest);
context.EndRequest += new EventHandler(OnEndRequest);
}
private void OnEndRequest(object sender, EventArgs e)
{
HttpApplication app = sender as HttpApplication;
if (app.Context.Response.BufferOutput)
{
TimeSpan ts = DateTime.Now.Subtract(_RequestStart);
app.Context.Response.AddHeader("X-ServerTiming",ts.TotalMilliseconds.ToString());
}
}
private void OnBeginRequest(object sender, EventArgs e)
{
_RequestStart = DateTime.Now;
}
}