Laz*_*ale 4 c# asp.net serialization session-state nopcommerce
我正在尝试在我们的nopcommerce 1.9安装中将会话状态存储在SQL而不是InProc中.当我对web.config进行必要的更改时,我收到此错误:
'/'应用程序中的服务器错误.
无法序列化会话状态.在"StateServer"和"SQLServer"模式下,ASP.NET将序列化会话状态对象,因此不允许使用不可序列化的对象或MarshalByRef对象.如果自定义会话状态存储在"自定义"模式下完成类似的序列化,则适用相同的限制.
描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.
异常详细信息:System.Web.HttpException:无法序列化会话状态.在"StateServer"和"SQLServer"模式下,ASP.NET将序列化会话状态对象,因此不允许使用不可序列化的对象或MarshalByRef对象.如果自定义会话状态存储在"自定义"模式下完成类似的序列化,则适用相同的限制.
来源错误:
在执行当前Web请求期间生成了未处理的异常.可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息.
堆栈跟踪:
[SerializationException:在Assembly'Nop.BusinessLogic中输入'NopSolutions.NopCommerce.BusinessLogic.Categories.Category',Version = 1.9.0.0,Culture = neutral,PublicKeyToken = null'未标记为可序列化.]
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(类型objectType,ISurrogateSelector surrogateSelector,StreamingContext上下文,SerObjectInfoInit serObjectInfoInit,IFormatterConverter转换器,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(流serializationStream,对象图,部首[]标头,布尔FCHECK)133 System.Web.Util.AltSerialization.WriteValueToStream(对象值,的BinaryWriter作家)1762[HttpException(0x80004005):无法序列化会话状态.在"StateServer"和"SQLServer"模式下,ASP.NET将序列化会话状态对象,因此不允许使用不可序列化的对象或MarshalByRef对象.如果自定义会话状态存储在"自定义"模式下完成类似的序列化,则适用相同的限制.]
System.Web.Util.AltSerialization.WriteValueToStream(Object value,BinaryWriter writer)+1847
System.Web.SessionState.SessionStateItemCollection.WriteValueToStreamWithAssert(对象值,BinaryWriter编写者)+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项,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步骤,布尔逻辑completedSynchronously)75版本信息:Microsoft .NET Framework版本:4.0.30319; ASP.NET版本:4.0.30319.272
有人请告诉我,我不需要序列化Nopcommerce中的每个对象来执行此操作!
dkn*_*ack 10
正如例外所示,你的类型
NopSolutions.NopCommerce.BusinessLogic.Categories.Category
不可序列化.我不知道该类型的实现,但您可以尝试使用该[Serializable]属性修饰类型.
如果你不能这样做,你可以简单地将对象的id写入你的会话.
如果您希望会话存储在sql server中,那么您在会话中写入的每个对象都需要可序列化.
自动添加[Serializable]属性(<Serializable()>在VB中)使您的类可序列化.您班级中的所有成员也需要可序列化.所以假设你的课程中有对象引用.那些对象所属的类也需要具有该[Serializable]属性.基本类型可自动序列化.