2013-06-14 2 views
5

Мы сейчас переживаем следующее сообщение об ошибке (из журналов) при использовании нашего приложения Windows Azure:неразрешимой (как еще) ошибки сериализации

System.Runtime.Serialization.SerializationException Assembly 'EntityFrameworkDynamicProxies-Marriott.emergePortal.Common, 
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' is not found. 

Эта ошибка приходит и уходит, мы не в состоянии понять, в чем именно причина.

Мы все пробовали! Любая помощь, которую может предоставить любой человек, была бы потрясающей.

Все сообщение об ошибке из сруба:

System.Web.HttpException (0x80004005): Exception of type 'System.Web.HttpException' was thrown. ---> System.Runtime.Serialization.SerializatioFnException: Assembly 'EntityFrameworkDynamicProxies-Marriott.emergePortal.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' is not found. 
    at System.Runtime.Serialization.XmlObjectSerializerReadContextComplex.InternalDeserializeInSharedTypeMode(XmlReaderDelegator xmlReader, Int32 declaredTypeID, Type declaredType, String name, String ns) 
    at ReadArrayOfPropertyEnrollmentFromXml(XmlReaderDelegator , XmlObjectSerializerReadContext , XmlDictionaryString , XmlDictionaryString , CollectionDataContract) 
    at System.Runtime.Serialization.CollectionDataContract.ReadXmlValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context) 
    at System.Runtime.Serialization.XmlObjectSerializerReadContextComplex.InternalDeserializeInSharedTypeMode(XmlReaderDelegator xmlReader, Int32 declaredTypeID, Type declaredType, String name, String ns) 
    at ReadArrayOfPropertyEnrollmentFromXml(XmlReaderDelegator , XmlObjectSerializerReadContext , XmlDictionaryString[] , XmlDictionaryString[]) 
    at System.Runtime.Serialization.ClassDataContract.ReadXmlValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context) 
    at System.Runtime.Serialization.XmlObjectSerializerReadContextComplex.InternalDeserializeInSharedTypeMode(XmlReaderDelegator xmlReader, Int32 declaredTypeID, Type declaredType, String name, String ns) 
    at ReadArrayOfanyTypeFromXml(XmlReaderDelegator , XmlObjectSerializerReadContext , XmlDictionaryString , XmlDictionaryString , CollectionDataContract) 
    at System.Runtime.Serialization.CollectionDataContract.ReadXmlValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context) 
    at System.Runtime.Serialization.XmlObjectSerializerReadContextComplex.InternalDeserializeInSharedTypeMode(XmlReaderDelegator xmlReader, Int32 declaredTypeID, Type declaredType, String name, String ns) 
    at ReadSerializableSessionStateStoreDataFromXml(XmlReaderDelegator , XmlObjectSerializerReadContext , XmlDictionaryString[] , XmlDictionaryString[]) 
    at System.Runtime.Serialization.ClassDataContract.ReadXmlValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context) 
    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, DataContractResolver dataContractResolver) 
    at System.Runtime.Serialization.XmlObjectSerializer.ReadObject(XmlDictionaryReader reader) 
    at Microsoft.ApplicationServer.Caching.NetDataContractCacheObjectSerializer.Deserialize(Stream stream) 
    at Microsoft.ApplicationServer.Caching.DataCacheObjectSerializationProvider.DeserializeUserObject(Byte[][] serializedData, ValueFlagsVersion flagsType) 
    at Microsoft.ApplicationServer.Caching.SocketClientProtocol.GetAndLock(String key, TimeSpan timeout, DataCacheLockHandle& lockHandle, String region, Boolean lockKey, IMonitoringListener listener) 
    at Microsoft.ApplicationServer.Caching.DataCache.<>c__DisplayClass8a.<GetAndLock>b__89() 
    at Microsoft.ApplicationServer.Caching.DataCache.GetAndLock(String key, TimeSpan timeout, DataCacheLockHandle& lockHandle) 
    at Microsoft.Web.DistributedCache.DataCacheForwarderBase.<>c__DisplayClass31`1.<PerformCacheOperation>b__30() 
    at Microsoft.Web.DistributedCache.DataCacheRetryWrapper.PerformCacheOperation(Action action) 
    at Microsoft.Web.DistributedCache.DataCacheForwarderBase.GetAndLock(String key, TimeSpan timeout, DataCacheLockHandle& lockHandle) 
    at Microsoft.Web.DistributedCache.BlobBasedSessionStoreProvider.GetItem(HttpContextBase context, String id, Boolean acquireWriteLock, Boolean& locked, TimeSpan& lockAge, Object& lockId, SessionStateActions& actions) 
    at Microsoft.Web.DistributedCache.DistributedCacheSessionStateStoreProvider.GetItemExclusive(HttpContext context, String id, Boolean& locked, TimeSpan& lockAge, Object& lockId, SessionStateActions& actions) 
    at System.Web.SessionState.SessionStateModule.GetSessionStateItem() 
    at System.Web.SessionState.SessionStateModule.PollLockedSessionCallback(Object state) 
    at System.Web.SessionState.SessionStateModule.EndAcquireState(IAsyncResult ar) 
    at System.Web.HttpApplication.AsyncEventExecutionStep.OnAsyncEventCompletion(IAsyncResult ar) 

ответ

2

Не видя какого-либо кода, это трудно устранить. Однако у нас было нечто похожее, которое было вызвано тем, что DataContractSerializer ожидал определенного типа (как определено в интерфейсе службы), но вместо этого получал прокси-тип EntityFramework.

Мы решили использовать шаблон объекта передачи данных, чтобы решить эту проблему. Мы создали базовые классы, которые были простыми объектами передачи данных. Классы, поддерживающие EF, наследуют от них и добавляют логику, связанную с сохранением.

Эти объекты DTO реализуют ICloneable (или что-то подобное), что позволяет нам легко создавать копии передачи данных прокси-классов Entity Framework перед отправкой объектов в сериализатор на уровне обслуживания.

Возможно также решить эту проблему, создав собственный сериализатор, обладающий знаниями прокси-классов Entity Framework, но этот подход больше походил на взлома. Образец DTO казался более простым и очень эффективным.

+0

Благодарим за предложение, похоже, что это связано с существенным рефактором кода. Возможно ли, что это просто проблема с кодом Microsoft? – Trevor

+1

Это возможно. Мы не использовали Windows Azure, поэтому это может быть что-то особенное для Azure. Хотя код Microsoft не идеален, я считаю, что мой имеет тенденцию быть еще менее совершенным, и ошибки обычно я создал. –

Смежные вопросы