ASP.NET会话状态服务器:存储对象为NULL

时间:2015-12-03 10:39:55

标签: asp.net session session-state

我在SQL数据库上设置了一个ASP.NET会话状态服务器:

<sessionState timeout="60" allowCustomSqlDatabase="true" mode="SQLServer" sqlConnectionString="..." />

我有错误的默认重定向:

<customErrors mode="On" defaultRedirect="~/Error.aspx" />

的Global.asax.cs:

private void Application_Error( object sender, EventArgs e )
{
    SomeSessionObj sessionObj = new SomeSessionObj();
    sessionObj.SomeProperty1 = true;
    sessionObj.SomeProperty2 = new Blabla();
    HttpContext.Current.Session["FooBar"] = sessionObj;
}

Error.aspx.cs:

protected void Page_Load( object sender, EventArgs e )
{
    SomeSessionObj sessionObj = HttpContext.Current.Session["FooBar"] as SomeSessionObj;
    // sessionObj is NOT NULL
    // sessionObj.SomeProperty1 is false
    // sessionObj.SomeProperty2 is NULL
}

SomeSessionObj和SomeProperty类都标记为Serializable。

如果没有State Server(inProc),它将按预期工作。

提前致谢。

1 个答案:

答案 0 :(得分:0)

好的,让它运转起来。

使用会话状态服务器时,您必须在Application_Error中调用Server.ClearError(),否则将终止请求并且不会写入会话状态。

void Application_Error(object sender, EventArgs e)
{
    Exception ex = Server.GetLastError();
    HttpContext.Current.Session["Error"] = ex.Message;
    Response.Redirect("error.aspx",false);
    Server.ClearError();  
}