【问题标题】:AppFabric Caching Serialization exceptionAppFabric 缓存序列化异常
【发布时间】:2014-09-13 12:34:04
【问题描述】:

我遇到了 AppFabric 缓存 1.1 的问题。尝试谷歌搜索,但没有出现(或使用错误的关键字)

有以下场景:

  • 我们有 2 台主机的集群启动并运行
  • 我们的开发服务器使用 appfabric 集群没有问题
  • 我们对测试服务器进行夜间构建(没有问题,所有配置都正确),这里的 appfabric 有问题
  • 我们有一个缓存供开发人员使用,另一个缓存供测试

我们遇到问题的对象是一个类 A 的列表,而类 A 有一些属性和一个类 B 的列表。这两个类都有序列化属性和数据契约加上数据成员。

在开发中,一切都按预期工作。我们从缓存中存储/检索/删除。

在测试中我们存储,但是当尝试检索时出现异常。 例外是:

错误消息:对象引用未设置为对象的实例。 堆栈跟踪:在 System.Runtime.Serialization.TypeName.LoadTypeWithPartialName(ITypeName typeNameInfo、Assembly initialAssembly、String fullTypeName) 在 System.Runtime.Serialization.TypeName.LoadTypeWithPartialName(ITypeName typeNameInfo、Assembly initialAssembly、String fullTypeName) 在 System.Runtime.Serialization.TypeName.GetType(程序集 initialAssembly, String fullTypeName) 在 System.Runtime.Serialization.XmlObjectSerializerReadContextComplex.ResolveDataContractTypeInSharedTypeMode(字符串 装配名称、字符串类型名称、装配和装配)在 System.Runtime.Serialization.XmlObjectSerializerReadContextComplex.ResolveDataContractInSharedTypeMode(字符串 装配名称、字符串类型名称、装配和装配、类型和类型)在 System.Runtime.Serialization.XmlObjectSerializerReadContextComplex.InternalDeserializeInSharedTypeMode(XmlReaderDelegator xmlReader,Int32 声明类型ID,类型声明类型,字符串名称, 字符串 ns) 在 System.Runtime.Serialization.XmlObjectSerializerReadContextComplex.InternalDeserialize(XmlReaderDelegator xmlReader,类型声明类型,字符串名称,字符串 ns) 在 System.Runtime.Serialization.NetDataContractSerializer.InternalReadObject(XmlReaderDelegator xmlReader,布尔验证对象名称)在 System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator 阅读器,布尔验证对象名称)在 Microsoft.ApplicationServer.Caching.Utility.Deserialize(字节[][] 缓冲区,布尔 checkTypeToLoad,对象上下文,IEnumerable1 已知类型)在 Microsoft.ApplicationServer.Caching.Utility.Deserialize(字节[][] 缓冲区,布尔 checkTypeToLoad)在 Microsoft.ApplicationServer.Caching.RoutingClient.SendMsgAndWait(RequestBody reqMsg、IRequestTracker 和跟踪器)在 Microsoft.ApplicationServer.Caching.DataCache.SendReceive(RequestBody reqMsg,IMonitoringListener 监听器)在 Microsoft.ApplicationServer.Caching.DataCache.InternalGet(字符串键, DataCacheItemVersion& 版本、字符串区域、IMonitoringListener 听众)在 Microsoft.ApplicationServer.Caching.DataCache.c__DisplayClass49.b__48() 在 Microsoft.ApplicationServer.Caching.MonitoringListenerFactory.EmptyListener.Microsoft.ApplicationServer.Caching.IMonitoringListener.Listen[TResult](Func`1 内部委托)在 Microsoft.ApplicationServer.Caching.DataCache.Get(字符串键)

编辑: 这些类使用 Serialize 和 DataContract 属性进行装饰。属性用 DataMember 属性修饰

【问题讨论】:

  • 对象结构在存储和检索之间是否发生了变化?或者,如果程序集版本在存储和接收之间发生了变化,那么它可能无法反序列化对象。 AppFabric 很挑剔..
  • 嗨@stuartd,不,这些情况都没有发生。我正在研究替代方案,其中一个自己进行序列化,因为 AppFabric 不序列化字节数组。

标签: c# exception serialization appfabric


【解决方案1】:

为了对它进行排序,我使用协议缓冲区并自己进行序列化。 当我打开 dll 时,如果它是一个字节数组,我会发现 AppFabric 绕过。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 2011-12-19
    • 1970-01-01
    相关资源
    最近更新 更多