serializing session state in asp.net

14,970

Solution 1

As the exception says your Type

NopSolutions.NopCommerce.BusinessLogic.Categories.Category

is not serializable. I dont know the implementation of that type but you can try to decorate the type with the [Serializable] attribute.

If you cant do this you can simply write the id of the object to your session.

If you want your session stored in sql server, every object your write into your session needs to be serializable.

More Information

Solution 2

Adding the [Serializable] attribute (<Serializable()> in VB) automatically makes your class serializable. All the members in your class need to be serializable too. So suppose there are object references in your class. Then the classes which those objects belong to need to have the [Serializable] attribute too. Basic types are automatically serializable.

Share:
14,970
Laziale
Author by

Laziale

Updated on July 12, 2022

Comments

  • Laziale
    Laziale almost 2 years

    I'm trying to store session state in SQL instead of InProc in our nopcommerce 1.9 install. When I make the requisite changes to the web.config I get this error:

    Server Error in '/' Application.

    Unable to serialize the session state. In 'StateServer' and 'SQLServer' mode, ASP.NET will serialize the session state objects, and as a result non-serializable objects or MarshalByRef objects are not permitted. The same restriction applies if similar serialization is done by the custom session state store in 'Custom' mode.

    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

    Exception Details: System.Web.HttpException: Unable to serialize the session state. In 'StateServer' and 'SQLServer' mode, ASP.NET will serialize the session state objects, and as a result non-serializable objects or MarshalByRef objects are not permitted. The same restriction applies if similar serialization is done by the custom session state store in 'Custom' mode.

    Source Error:

    An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

    Stack Trace:

    [SerializationException: Type 'NopSolutions.NopCommerce.BusinessLogic.Categories.Category' in Assembly 'Nop.BusinessLogic, Version=1.9.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.]
    System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type) +9449041
    System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context) +247
    System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo() +160 System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Type objectType, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, SerializationBinder binder) +371
    System.Runtime.Serialization.Formatters.Binary.ObjectWriter.WriteArray(WriteObjectInfo objectInfo, NameInfo memberNameInfo, WriteObjectInfo memberObjectInfo) +205 System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo) +651
    System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck) +444 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck) +133 System.Web.Util.AltSerialization.WriteValueToStream(Object value, BinaryWriter writer) +1762

    [HttpException (0x80004005): Unable to serialize the session state. In 'StateServer' and 'SQLServer' mode, ASP.NET will serialize the session state objects, and as a result non-serializable objects or MarshalByRef objects are not permitted. The same restriction applies if similar serialization is done by the custom session state store in 'Custom' mode.]
    System.Web.Util.AltSerialization.WriteValueToStream(Object value, BinaryWriter writer) +1847
    System.Web.SessionState.SessionStateItemCollection.WriteValueToStreamWithAssert(Object value, BinaryWriter writer) +34
    System.Web.SessionState.SessionStateItemCollection.Serialize(BinaryWriter writer) +638
    System.Web.SessionState.SessionStateUtility.Serialize(SessionStateStoreData item, Stream stream) +244
    System.Web.SessionState.SessionStateUtility.SerializeStoreData(SessionStateStoreData item, Int32 initialStreamSize, Byte[]& buf, Int32& length, Boolean compressionEnabled) +67
    System.Web.SessionState.SqlSessionStateStore.SetAndReleaseItemExclusive(HttpContext context, String id, SessionStateStoreData item, Object lockId, Boolean newItem) +140
    System.Web.SessionState.SessionStateModule.OnReleaseState(Object source, EventArgs eventArgs) +807
    System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +148 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75

    Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.272

    Somebody PLEASE tell me I don't need to serialize every object in Nopcommerce to do this!

  • Laziale
    Laziale about 12 years
    Thanks for your reply, how can I write the id of the object to my session, for example if I have class I want to serialize how I can write that class id to my session? Thanks in advance