Ошибка сериализации Enyim Linq - PullRequest
0 голосов
/ 29 августа 2011

Я использую Devart для выполнения объекта БД и сопоставления хранимых процедур.

Теперь я хочу сохранить в кеше (используя Enyim by MemCached) результат объекта «Процедура хранения».

Когда я пытаюсь это сделать, у меня возникает ошибка такого типа (короче: введите Devart.Data.Linq.a в Devart.Data.Linq не подписано как сериализуемое)

Enyim.Caching.MemcachedClient - System.Runtime.Serialization.SerializationException: Il tipo 'Devart.Data.Linq.a' nell'assembly 'Devart.Data.Linq, Version=2.50.29.0, Culture=neutral, PublicKeyToken=09af7300eec23701' non è contrassegnato come serializzabile.
   in System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type)
   in System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context)
   in System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo()
   in System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter)
   in System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter)
   in System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo)
   in System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck)
   in System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck)
   in System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph)
   in Enyim.Caching.Memcached.DefaultTranscoder.SerializeObject(Object value) in d:\d\repo\EnyimMemcached\Enyim.Caching\Memcached\Transcoders\DefaultTranscoder.cs:riga 219
   in Enyim.Caching.Memcached.DefaultTranscoder.Serialize(Object value) in d:\d\repo\EnyimMemcached\Enyim.Caching\Memcached\Transcoders\DefaultTranscoder.cs:riga 65
   in Enyim.Caching.Memcached.DefaultTranscoder.Enyim.Caching.Memcached.ITranscoder.Serialize(Object value) in d:\d\repo\EnyimMemcached\Enyim.Caching\Memcached\Transcoders\DefaultTranscoder.cs:riga 18
   in Enyim.Caching.MemcachedClient.PerformStore(StoreMode mode, String key, Object value, UInt32 expires, UInt64& cas, Int32& statusCode) in d:\d\repo\EnyimMemcached\Enyim.Caching\MemcachedClient.cs:riga 313Enyim.Caching.MemcachedClient - System.Runtime.Serialization.SerializationException: Il tipo 'Devart.Data.Linq.a' nell'assembly 'Devart.Data.Linq, Version=2.50.29.0, Culture=neutral, PublicKeyToken=09af7300eec23701' non è contrassegnato come serializzabile.
   in System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type)
   in System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context)
   in System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo()
   in System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter)
   in System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter)
   in System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo)
   in System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck)
   in System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck)
   in System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph)
   in Enyim.Caching.Memcached.DefaultTranscoder.SerializeObject(Object value) in d:\d\repo\EnyimMemcached\Enyim.Caching\Memcached\Transcoders\DefaultTranscoder.cs:riga 219
   in Enyim.Caching.Memcached.DefaultTranscoder.Serialize(Object value) in d:\d\repo\EnyimMemcached\Enyim.Caching\Memcached\Transcoders\DefaultTranscoder.cs:riga 65
   in Enyim.Caching.Memcached.DefaultTranscoder.Enyim.Caching.Memcached.ITranscoder.Serialize(Object value) in d:\d\repo\EnyimMemcached\Enyim.Caching\Memcached\Transcoders\DefaultTranscoder.cs:riga 18
   in Enyim.Caching.MemcachedClient.PerformStore(StoreMode mode, String key, Object value, UInt32 expires, UInt64& cas, Int32& statusCode) in d:\d\repo\EnyimMemcached\Enyim.Caching\MemcachedClient.cs:riga 313

Это журнал Enyim. Я уверен, что MemCached правильно настроен, потому что я пытался получить и установить объект в кеше с помощью telnet, и это было сделано.

Ответы [ 2 ]

0 голосов
/ 31 августа 2011

Согласно трассировке стека, Enyim.Caching.MemcachedClient использует BinaryFormatter для сериализации объектов.Объекты LinqConnect не предназначены для сериализации через BinaryFormatter, вместо них следует использовать DataContractSerializer .Для получения дополнительной информации об этом способе сериализации, пожалуйста, обратитесь к следующей статье: http://msdn.microsoft.com/en-us/library/bb546184.aspx#Y1680 (написано о LINQ to SQL, но может также применяться к LinqConnect).

0 голосов
/ 31 августа 2011

Ваше выражение linq не было выполнено, и по этой причине нет никаких сериализуемых объектов для записи в кэш.

Если вы выполняете ".ToList ()" в IEnumerable, у вас все должно быть в порядке.

...