我希望释放一些数据库资源,并在ASP.NET站点中的用户会话结束时设置一些标志。但是当我编写我的代码以访问Global.asax文件的Session End方法中的会话变量时,每次应用程序启动时都会调用它,为什么会出现这种奇怪的行为?
其次,我想访问用户特定的会话变量,并在Session End上的DB中释放它们。因此,我使用的会话变量很少,我在页面上的web方法中设置它们并尝试在Session End上访问它们。但是,自从在App启动时调用Session结束时,它总是抛出Null引用异常。
这是mycode。在.aspx页面中设置Webmethod中的变量
[WebMethod(EnableSession=true)]
protected void checkUser()
{
Session["TestObject"] = "Hello I am session";
}
在我的global.asax文件中,我试图在Session_End方法
中按如下方式访问void Session_End(object sender, EventArgs e)
{
// Code that runs when a session ends.
// Note: The Session_End event is raised only when the sessionstate mode
// is set to InProc in the Web.config file. If session mode is set to StateServer
// or SQLServer, the event is not raised.
if (this.Context.Session != null && this.Context != null)
{
string k = this.Session["TestObject"].ToString();
}
}
我甚至尝试过HttpContext.current.Session等。但都没有用。所有都抛出异常,因为在应用启动时调用会话结束,甚至在会话超时时调用。