2015-12-03 1 views
0

J'ai mis en place une session d'état ASP.NET Server sur une base de données SQL:ASP.NET session serveur d'état: Objet NULL est stockée

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

J'ai un défaut redirect sur les erreurs:

<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 
} 

Les classes SomeSessionObj et SomeProperty sont marquées Serializable.

Sans serveur d'état (inProc), cela fonctionne comme prévu.

Merci d'avance.

Répondre

0

Ok, ça marche. Lorsque vous utilisez Session State Server, vous devez appeler Server.ClearError() dans Application_Error, sinon la requête sera terminée et l'état de la session ne sera pas écrit.

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