Extend HttpApplication with session counts and uptime
It’s sometimes useful to know or display how many people are currently using your web application and how long it’s been up for.
As web applications normally inherit from System.Web.HttpApplication
we can extend this class with a common re-usable class to add the required functionality.
public class WebApplication : System.Web.HttpApplication {
private static readonlyDateTime pStartedAt = DateTime.Now;
private static long pSessionCount = 0;
public WebApplication() : base() { }
public override void Init () {
base.Init();
HookEventHandlers();
}
public static long SessionCount {
get { return pSessionCount; }
}
public static DateTime StartedAt {
get { return pStartedAt; }
}
public static TimeSpan Uptime {
get { return DateTime.Now.Subtract(pStartedAt); }
}
private void HookEventHandlers () {
IHttpModule httpModule = Modules["Session"];
if (httpModule is SessionStateModule) {
SessionStateModule sessionStateModule = ((SessionStateModule) httpModule);
sessionStateModule.Start += new System.EventHandler(SessionStart);
sessionStateModule.End += new System.EventHandler(SessionEnd);
}
}
private void SessionStart (object sender, EventArgs e) {
Interlocked.Increment(ref pSessionCount);
}
private void SessionEnd (object sender, EventArgs e) {
Interlocked.Decrement(ref pSessionCount);
}
}
The next step is to ensure your web application’s class – as defined by global.asax – is of the new WebApplication type. A good approach is to have your own Global.asax.cs file inherit directly from the new WebApplication;
public class App : WebApplication { ... }
Now those sessions and uptime are being tracked how do you get at them?
lblCurrentSessions.Text = WebApplication.SessionCount.ToString();
lblUptime.Text = WebApplication.Uptime.ToString();
This approach is only suitable for sites operating on a single web server.
[)amien
4 responses