[英]Why is HttpContext.Current null during the Session_End event?
我想计算我的用户,这是我的dll文件中的以下代码:
public static class UserCount
{
public static void add()
{
HttpContext.Current.Application.Lock();
int count = (int) HttpContext.Current.Application["CountOfUsers"];
count++;
HttpContext.Current.Application["CountOfUsers"]=count;
HttpContext.Current.Application.UnLock();
}
public static void subtract()
{
HttpContext.Current.Application.Lock();//error : HttpContext.Current is null. why?
int count = (int) HttpContext.Current.Application["CountOfUsers"];
count--;
HttpContext.Current.Application["CountOfUsers"]=count;
HttpContext.Current.Application.UnLock();
}
}
我已经设置了Session.TimeOut=1;
一分钟后,Global.asax文件中的以下方法将运行:
protected void Session_End(object sender, EventArgs e)
{
UserCount.subtract();
}
为什么subtract
方法中的HttpContext.Current
null导致它引发异常?
在Session_End上,浏览器不必进行任何通信,因此没有HttpContext可以引用,它解释了为什么它为null。
查看您的代码,您似乎对应用程序缓存感兴趣。 这可以通过HttpApplication实例上的Application属性获得。
如果您在使用HttpApplicationState的 UserCount类上创建重载,则可以:
public static void subtract(HttpApplicationState appstate)
{
appstate.Lock();
int count = (int) appstate["CountOfUsers"];
count--;
appstate["CountOfUsers"]=count;
appstate.UnLock();
}
您可以从Session_End使用它,如下所示:
protected void Session_End(object sender, EventArgs e)
{
UserCount.subtract(Application);
}
之所以可行,是因为从技术上来说global_asax是HttpApplication的子类,因此可以从global_asax文件访问其所有成员。
如果存在HttpContext,则可以使用该substract
的其他实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.