0
votes

I'm running with problems with AppFabric Caching 1.1. Try google it but nothing came up (or using the wrong keywords)

There is the follow scenario:

  • We have the cluster with 2 hosts up and running
  • We have our dev server using the appfabric cluster with no problem
  • We do night builds to a testing server (with no problems, all the configs are right) and here the appfabric have problems
  • We have one cache for dev and another to test

The object that we have problems is a list of classes A, and the class A have some properties and a list of class B. Both classes have serialize attribute and datacontract plus datamember.

In dev everything work as expected. We store/retrieve/delete from cache.

In test we store, but when try to retrieve have an exception. The exception is:

Error Message: Object reference not set to an instance of an object. Stack Trace: at System.Runtime.Serialization.TypeName.LoadTypeWithPartialName(ITypeName typeNameInfo, Assembly initialAssembly, String fullTypeName) at System.Runtime.Serialization.TypeName.LoadTypeWithPartialName(ITypeName typeNameInfo, Assembly initialAssembly, String fullTypeName) at System.Runtime.Serialization.TypeName.GetType(Assembly initialAssembly, String fullTypeName) at System.Runtime.Serialization.XmlObjectSerializerReadContextComplex.ResolveDataContractTypeInSharedTypeMode(String assemblyName, String typeName, Assembly& assembly) at System.Runtime.Serialization.XmlObjectSerializerReadContextComplex.ResolveDataContractInSharedTypeMode(String assemblyName, String typeName, Assembly& assembly, Type& type) at System.Runtime.Serialization.XmlObjectSerializerReadContextComplex.InternalDeserializeInSharedTypeMode(XmlReaderDelegator xmlReader, Int32 declaredTypeID, Type declaredType, String name, String ns) at System.Runtime.Serialization.XmlObjectSerializerReadContextComplex.InternalDeserialize(XmlReaderDelegator xmlReader, Type declaredType, String name, String ns) at System.Runtime.Serialization.NetDataContractSerializer.InternalReadObject(XmlReaderDelegator xmlReader, Boolean verifyObjectName) at System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator reader, Boolean verifyObjectName) at Microsoft.ApplicationServer.Caching.Utility.Deserialize(Byte[][] buffers, Boolean checkTypeToLoad, Object context, IEnumerable1 knownTypes) at Microsoft.ApplicationServer.Caching.Utility.Deserialize(Byte[][] buffers, Boolean checkTypeToLoad) at Microsoft.ApplicationServer.Caching.RoutingClient.SendMsgAndWait(RequestBody reqMsg, IRequestTracker& tracker) at Microsoft.ApplicationServer.Caching.DataCache.SendReceive(RequestBody reqMsg, IMonitoringListener listener) at Microsoft.ApplicationServer.Caching.DataCache.InternalGet(String key, DataCacheItemVersion& version, String region, IMonitoringListener listener) at Microsoft.ApplicationServer.Caching.DataCache.<>c__DisplayClass49.b__48() at Microsoft.ApplicationServer.Caching.MonitoringListenerFactory.EmptyListener.Microsoft.ApplicationServer.Caching.IMonitoringListener.Listen[TResult](Func`1 innerDelegate) at Microsoft.ApplicationServer.Caching.DataCache.Get(String key)

EDIT: The classes are decorate with Serialize and DataContract attributes. The properties are decorated with DataMember attribute

1
Has the object structure changed between store and retrieve? Or if assembly version has changed between store and receive then it can fail to deserialize an object. AppFabric is very picky..stuartd
Hi @stuartd, No, none of those scenarios happened. I'm study alternatives, one of them do the serialization myself, because the AppFabric do not serialize an byte array.joaoasrosa

1 Answers

0
votes

To sort it I use the Protocol Buffer and do the serialization myself. When I open the dll's, I discover the AppFabric bypass if it is a byte array.