ASP.NET 会话状态服务器:存储的对象为 NULL
ASP.NET Session State Server: Stored Object is NULL
我已经在 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 类 都标记为可序列化。
没有状态服务器 (inProc) 它按预期工作。
提前致谢。
好的,成功了。
当使用会话状态服务器时,您必须在 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();
}
我已经在 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 类 都标记为可序列化。
没有状态服务器 (inProc) 它按预期工作。
提前致谢。
好的,成功了。
当使用会话状态服务器时,您必须在 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();
}