ERROR: Los datos de sesión no se guardan en el estado de sesión fuera de proceso

Exención de responsabilidades de contenido KB retirado

Este artículo se refiere a productos para los que Microsoft ya no ofrece soporte técnico. Por tanto, el presente artículo se ofrece "tal cual" y no será actualizado.

Síntomas

Cuando usa el modo de estado de sesión SQLServer, si intenta almacenar una instancia de una clase que no esté marcada como serializable en una variable de sesión, la solicitud vuelve sin indicar un error. Sin embargo, ASP.NET en realidad no puede guardar los datos de la sesión e impide las solicitudes posteriores en la misma sesión.

Este mismo comportamiento se produce si usa el modo de estado de la sesión StateServer, pero también recibe el error en tiempo de ejecución siguiente:
Descripción: Se produjo una excepción no controlada durante la ejecución de la solicitud Web actual. Revise el seguimiento de la pila para obtener más información acerca del error y dónde se originó en el código.

Detalles de la excepción: System.Runtime.Serialization.SerializationException: El tipo <espacioDeNombres.nombreDeClase> del ensamblado <nombreDeEnsamblado>, Version=1.0.676.30211, Culture=neutral, PublicKeyToken=null no está marcado como serializable.
Cuando el estado de sesión se configura para almacenarse en Microsoft SQL Server, el subproceso que procesa la solicitud se bloquea y el procedimiento almacenado TempGetStateItemExclusive de la base de datos ASPState se llama continuamente con los mismos valores en incrementos de un segundo. Si el estado de la sesión se establece como InProc, todo funciona como se esperaba.

Causa

Este problema se debe a que la clase no está marcada como serializable.

Solución

Para resolver este problema, agregue el atributo [Serializable] para marcar la clase como serializable. Por ejemplo, use el siguiente código de Microsoft Visual C# .NET:
[Serializable]
public class MyClass
{
//class code
}
O bien use el siguiente código de Microsoft Visual Basic .NET:
<Serializable()> _
Public Class MyClass
'Class code
End Class
Nota: si la clase usa otras clases, debe marcar cada clase como serializable. El problema de este artículo también ocurre con algunas clases de Microsoft .NET Framework como la clase XmlDocument. Estas clases no se pueden marcar como serializables, por lo que el error se sigue produciendo.

Estado

Microsoft ha confirmado que se trata de un error de los productos de Microsoft enumerados al principio de este artículo.

Este error se corrigió en ASP.NET (que se incluye con .NET Framework) 1.1.
Propiedades

Id. de artículo: 312112 - Última revisión: 9 ene. 2017 - Revisión: 1

Comentarios