【发布时间】: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