Apache Ignite Query - не найдено подходящего типа для объекта - PullRequest
0 голосов
/ 07 ноября 2018

Я получил ошибку "не найден тип для объекта" при запросе ключей кеша из кеша apache ignite.

Экземпляр сервера Ignite работает на сервере Linux, а мой запрос запускается на экземпляре клиента зажигания, запущенном приложением Microsoft Server .Net Web Forms. DLL для этого типа уже существует в папке bin приложения.

Мой запрос:

List<string> cacheKeys = cache.Select(e => e.Key).Where(e => e.StartsWith(cacheItemKeyPrefix)).ToList();

Ошибка:

Apache.Ignite.Core.Binary.BinaryObjectException: не найден соответствующий тип для объекта [typeId = -274908056, typeName = System.Collections.Generic.Dictionary 2[[System.Decimal],[CUST.CompositionTypes.PrivateBankingCustomer]]]. This usually indicates that assembly with specified type is not loaded on a node. When using Apache.Ignite.exe, make sure to load assemblies with -assembly parameter. Alternatively, set IgniteConfiguration.PeerAssemblyLoadingEnabled to true. at Apache.Ignite.Core.Impl.Binary.BinaryReader.ReadFullObject[T](Int32 pos, Type typeOverride) at Apache.Ignite.Core.Impl.Binary.BinaryReader.TryDeserialize[T](T& res, Type typeOverride) at Apache.Ignite.Core.Impl.Binary.BinaryReader.Deserialize[T](Type typeOverride) at Apache.Ignite.Core.Impl.Binary.BinaryReader.ReadBinaryObject[T](Boolean doDetach) at Apache.Ignite.Core.Impl.Binary.BinaryReader.TryDeserialize[T](T& res, Type typeOverride) at Apache.Ignite.Core.Impl.Binary.BinaryReader.Deserialize[T](Type typeOverride) at Apache.Ignite.Core.Impl.Cache.CacheEnumerator 2.b__0 (поток IBinaryStream) в Apache.Ignite.Core .Impl.PlatformJniTarget.OutStream [T] (тип Int32, Func 2 readAction) at Apache.Ignite.Core.Impl.Cache.CacheEnumeratorProxy 2.MoveNext () в System.Linq.Enumerable.WhereSelectEnumerableIterator 2.MoveNext() at System.Linq.Enumerable.WhereEnumerableIterator 1.MoveNext () в System.Collections.Generic.List 1..ctor(IEnumerable 1 коллекция) в System.Linq.Enumerable.ToList [TSource] (источник IEnumerable`1)

1 Ответ

0 голосов
/ 14 ноября 2018

Вы можете запускать закрытие .Net только в том случае, если весь кластер является кластером .Net, включая серверные узлы. Если они уже есть, я предлагаю некоторое несоответствие между сборками Windows и Linux.

Есть ли у вас тип PrivateBankingCustomer в сборках узлов Linux? Обратите внимание, что ключи / значения кэша не могут быть загружены в одноранговую сборку.

...