簡體   English   中英

在asp.net中序列化會話狀態

[英]serializing session state in asp.net

我正在嘗試在我們的nopcommerce 1.9安裝中將會話狀態存儲在SQL而不是InProc中。 當我對web.config進行必要的更改時,我收到此錯誤:

'/'應用程序中的服務器錯誤。

無法序列化會話狀態。 在“StateServer”和“SQLServer”模式下,ASP.NET將序列化會話狀態對象,因此不允許使用不可序列化的對象或MarshalByRef對象。 如果自定義會話狀態存儲在“自定義”模式下完成類似的序列化,則適用相同的限制。

描述:執行當前Web請求期間發生未處理的異常。 請查看堆棧跟蹤以獲取有關錯誤及其源自代碼的位置的更多信息。

異常詳細信息:System.Web.HttpException:無法序列化會話狀態。 在“StateServer”和“SQLServer”模式下,ASP.NET將序列化會話狀態對象,因此不允許使用不可序列化的對象或MarshalByRef對象。 如果自定義會話狀態存儲在“自定義”模式下完成類似的序列化,則適用相同的限制。

來源錯誤:

在執行當前Web請求期間生成了未處理的異常。 可以使用下面的異常堆棧跟蹤來識別有關異常的起源和位置的信息。

堆棧跟蹤:

[SerializationException:在程序集'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(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):無法序列化會話狀態。 在“StateServer”和“SQLServer”模式下,ASP.NET將序列化會話狀態對象,因此不允許使用不可序列化的對象或MarshalByRef對象。 如果自定義會話狀態存儲在“自定義”模式下完成類似的序列化,則適用相同的限制。
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

版本信息:Microsoft .NET Framework版本:4.0.30319; ASP.NET版本:4.0.30319.272

有人請告訴我,我不需要序列化Nopcommerce中的每個對象來執行此操作!

正如例外所示,你的類型

NopSolutions.NopCommerce.BusinessLogic.Categories.Category

不可序列化。 我不知道該類型的實現,但您可以嘗試使用[Serializable]屬性修飾類型。

如果你不能這樣做,你可以簡單地將對象的id寫入你的會話。

如果您希望會話存儲在sql server中,那么您在會話中寫入的每個對象都需要可序列化。

更多信息

在VB中添加[Serializable]屬性( <Serializable()> )會自動使您的類可序列化。 您班級中的所有成員也需要可序列化。 所以假設你的課程中有對象引用。 那些對象所屬的類也需要具有[Serializable]屬性。 基本類型可自動序列化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM