4

nopcommerce 1.9 のインストールで、セッション状態を InProc ではなく SQL に保存しようとしています。web.config に必要な変更を加えると、次のエラーが発生します。

「/」アプリケーションでサーバー エラーが発生しました。

セッション状態をシリアル化できません。'StateServer' および 'SQLServer' モードでは、ASP.NET はセッション状態オブジェクトをシリアル化するため、シリアル化できないオブジェクトまたは MarshalByRef オブジェクトは許可されません。「カスタム」モードのカスタム セッション状態ストアによって同様のシリアル化が行われる場合、同じ制限が適用されます。

説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.Web.HttpException: セッション状態をシリアル化できません。'StateServer' および 'SQLServer' モードでは、ASP.NET はセッション状態オブジェクトをシリアル化するため、シリアル化できないオブジェクトまたは MarshalByRef オブジェクトは許可されません。「カスタム」モードのカスタム セッション状態ストアによって同様のシリアル化が行われる場合、同じ制限が適用されます。

ソース エラー:

現在の Web 要求の実行中に未処理の例外が生成されました。例外の発生元と場所に関する情報は、以下の例外スタック トレースを使用して特定できます。

スタックトレース:

[SerializationException: Type 'NopSolutions.NopCommerce.BusinessLogic.Categories.Category' in Assembly 'Nop.BusinessLogic, Version=1.9.0.0, Culture=neutral, PublicKeyToken=null' is not serializable.]
System.Runtime.Serialization.FormatterServices .InternalGetSerializableMembers(RuntimeType タイプ) +9449041
System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type タイプ、StreamingContext コンテキスト) +247
System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo() +160 System.Runtime.Serialization.Formatters .Binary.WriteObjectInfo.InitSerialize(タイプ objectType、ISurrogateSelector surrogateSelector、StreamingContext コンテキスト、SerObjectInfoInit serObjectInfoInit、IFormatterConverter コンバーター、SerializationBinder バインダー) +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(オブジェクト グラフ、Header[] inHeaders、__BinaryWriter serWriter、ブール fCheck) +444 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(ストリーム シリアル化ストリーム、オブジェクト グラフ、 Header[] headers, Boolean fCheck) +133 System.Web.Util.AltSerialization.WriteValueToStream(Object value, BinaryWriter writer) +1762

[HttpException (0x80004005): セッション状態をシリアル化できません。'StateServer' および 'SQLServer' モードでは、ASP.NET はセッション状態オブジェクトをシリアル化するため、シリアル化できないオブジェクトまたは MarshalByRef オブジェクトは許可されません。「カスタム」モードのカスタム セッション状態ストアによって同様のシリアル化が行われる場合、同じ制限が適用され
ます
。オブジェクト値, BinaryWriter ライター) +34
System.Web.SessionState.SessionStateItemCollection.Serialize(BinaryWriter ライター) +638
System.Web.SessionState.SessionStateUtility.Serialize(SessionStateStoreData アイテム,
System.Web.SessionState.SessionStateUtility.SerializeStoreData(SessionStateStoreData 項目、Int32 initialStreamSize、Byte[]& buf、Int32& 長さ、Boolean compressionEnabled) +67
System.Web.SessionState.SqlSessionStateStore.SetAndReleaseItemExclusive(HttpContext コンテキスト、文字列 ID、SessionStateStoreData 項目、オブジェクトlockId, Boolean newItem) +140
System.Web.SessionState.SessionStateModule.OnReleaseState(オブジェクト ソース、EventArgs eventArgs) +807
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +148 System.Web.HttpApplication. ExecuteStep(IExecutionStep ステップ、ブール値および完了同期) +75

バージョン情報: Microsoft .NET Framework バージョン:4.0.30319; ASP.NET バージョン:4.0.30319.272

これを行うために Nopcommerce のすべてのオブジェクトをシリアル化する必要はないと誰か教えてください!

4

2 に答える 2

11

例外があなたのタイプを言うように

NopSolutions.NopCommerce.BusinessLogic.Categories.Category

シリアライズできません。その型の実装はわかりませんが、型を[Serializable]属性で装飾してみてください。

これができない場合は、オブジェクトの ID をセッションに書き込むだけです。

セッションを SQL Server に保存する場合は、セッションに書き込むすべてのオブジェクトをシリアル化できる必要があります。

詳しくは

于 2012-04-19T15:02:09.310 に答える
5

[Serializable]属性 ( <Serializable()>VB で) を追加すると、クラスは自動的にシリアライズ可能になります。クラスのすべてのメンバーもシリアライズ可能である必要があります。クラスにオブジェクト参照があるとします。次に、それらのオブジェクトが属するクラスにも[Serializable]属性が必要です。基本型は自動的にシリアライズ可能です。

于 2012-10-18T09:47:00.913 に答える