【问题标题】:Serialization in SitecoreSitecore 中的序列化
【发布时间】:2019-01-28 21:32:35
【问题描述】:

我在 Sitecore 中有一个自定义模块,如果应用程序池会话状态设置为 In process,它可以正常工作。当我将其更改为 SQL Server 时,我收到错误消息,指出它无法序列化会话状态。我使用的所有课程都是serializable。我的代码是由自定义功能区按钮触发的,当我单击它时会引发此错误。它应该显示对话框形式,但它显示错误消息。我以为这与我的类继承的Sitecore DialogForm类有关,但事实证明并非如此。

当我调试时,一旦Run(TranslateArgs args) 方法完成执行,就会引发代码错误 - 它是从public override void Execute(CommandContext context) 调用的,并且应该通过调用SheerResponse.ShowModalDialog(str4.ToString(), true); 来显示对话框

我还以为是因为我在Run 方法中使用了ClientPipelineArgs,但是在创建继承ClientPipelineArgs 的自定义类(并使其可序列化)之后,错误并没有消失。

任何想法可能导致它?

堆栈跟踪:

[SerializationException: Type 'Sitecore.Data.Database' in Assembly 'Sitecore.Kernel, Version=7.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.]
   System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type) +14210117
   System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context) +408
   System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo() +420
   System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter, SerializationBinder binder) +532
   System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo) +969
   System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck) +633
   System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck) +322
   System.Web.Util.AltSerialization.WriteValueToStream(Object value, BinaryWriter writer) +1487

[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) +2252727
   System.Web.SessionState.SessionStateItemCollection.WriteValueToStreamWithAssert(Object value, BinaryWriter writer) +49
   System.Web.SessionState.SessionStateItemCollection.Serialize(BinaryWriter writer) +729
   System.Web.SessionState.SessionStateUtility.Serialize(SessionStateStoreData item, Stream stream) +336
   System.Web.SessionState.SessionStateUtility.SerializeStoreData(SessionStateStoreData item, Int32 initialStreamSize, Byte[]& buf, Int32& length, Boolean compressionEnabled) +99
   System.Web.SessionState.SqlSessionStateStore.SetAndReleaseItemExclusive(HttpContext context, String id, SessionStateStoreData item, Object lockId, Boolean newItem) +3538900
   System.Web.SessionState.SessionStateModule.OnReleaseState(Object source, EventArgs eventArgs) +1021
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +92
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +165

【问题讨论】:

  • 您能提供您的代码吗?仔细检查您是否没有匿名方法,它们也可能导致此问题。
  • 能否提供 StackTrace?

标签: c# serialization sitecore


【解决方案1】:

堆栈跟踪告诉我们,一些代码试图将Sitecore.Data.Database 放到 SessionState 上,但这是行不通的。它没有公共构造函数,但这是最不重要的问题。如果尝试将实例化的 Item 也放在 SessionState 上,也会发生这种情况。

堆栈跟踪似乎不完整。它应该向您显示 Run 方法中的哪一行代码是异常的根源。

我不清楚什么;您使用的是哪个版本的 Sitecore?

【讨论】:

  • 这就是 Stack Trace 的全部内容 - 我全部复制了。我在 Sitecore 8.0 上。
【解决方案2】:

当前进程外会话状态模式是 Sitecore 中的实验性功能。 InProc 是客户端的最佳选择。查找更多详细信息here。 如果您仍然认为进程外是正确的方法,请确保按照this 文章进行设置。

[更新] 内容管理实例不再支持进程外会话状态。 Link.

【讨论】:

  • 您提到的文章来自 2014 年和 2015 年,因此人们可能会认为它已经实施,因为他们在 v.7.5 的更新中引入了修复(最新的是 8.1,我在 8.0)。但是按照指导配置网站并没有解决问题。
  • 链接是旧的,但它是有效的。 CM 进程外会话状态已经在实验性支持下运行了一段时间。现在看来,Sitecore 终于决定完全不支持它了。基于此链接,您必须始终在 Content Management 实例上设置 InProc。 doc.sitecore.net/sitecore_experience_platform/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多