This line is the problem: public ICache<string, T> IgniteCache { get; set; }
You can't serialize an Ignite cache. Instead, use [InstanceResource] - uncomment the line you already have, then get the cache by name: [InstanceResource] private readonly IIgnite _ignite; public string CacheName { get; set; } ... var cache = _ignite.GetCache<string, T>(CacheName); cache.Query(...) On Wed, Aug 24, 2022 at 1:31 PM Charlin S <charli...@hotelhub.com> wrote: > Hi, > The exception details are as follows. > System.AggregateException > HResult=0x80131500 > Message=One or more errors occurred. (Serializing delegates is not > supported on this platform.) > Source=System.Private.CoreLib > StackTrace: > at System.Threading.Tasks.Task`1.GetResultCore(Boolean > waitCompletionNotification) > at System.Threading.Tasks.Task`1.get_Result() > at Apache.Ignite.Core.Impl.Common.Future`1.Get() > at > Apache.Ignite.Core.Impl.Compute.Compute.Apply[TArg,TJobRes](IComputeFunc`2 > clo, TArg arg) > at ConsoleApp2.CacheUtils.ComputeTest_OnIgnite(String searchCriteria) > in D:\NGSourceCode\POC\ConsoleApp2\ConsoleApp2\CacheUtils.cs:line 76 > at ConsoleApp2.Program.Main(String[] args) in > D:\NGSourceCode\POC\ConsoleApp2\ConsoleApp2\Program.cs:line 19 > > This exception was originally thrown at this call stack: > > System.MulticastDelegate.GetObjectData(System.Runtime.Serialization.SerializationInfo, > System.Runtime.Serialization.StreamingContext) > > Apache.Ignite.Core.Impl.Binary.SerializableSerializer.WriteBinary<T>(T, > Apache.Ignite.Core.Impl.Binary.BinaryWriter) > Apache.Ignite.Core.Impl.Binary.BinaryWriter.Write<T>(T) > Apache.Ignite.Core.Impl.Binary.BinaryWriter.WriteObject<T>(string, T) > > Apache.Ignite.Core.Impl.Binary.BinaryReflectiveSerializerInternal.Apache.Ignite.Core.Impl.Binary.IBinarySerializerInternal.WriteBinary<T>(T, > Apache.Ignite.Core.Impl.Binary.BinaryWriter) > Apache.Ignite.Core.Impl.Binary.BinaryWriter.Write<T>(T) > Apache.Ignite.Core.Impl.Binary.BinaryWriter.WriteObject<T>(string, T) > > Apache.Ignite.Core.Impl.Binary.BinaryReflectiveSerializerInternal.Apache.Ignite.Core.Impl.Binary.IBinarySerializerInternal.WriteBinary<T>(T, > Apache.Ignite.Core.Impl.Binary.BinaryWriter) > Apache.Ignite.Core.Impl.Binary.BinaryWriter.Write<T>(T) > Apache.Ignite.Core.Impl.Binary.BinaryWriter.WriteObject<T>(string, T) > ... > [Call Stack Truncated] > > Inner Exception 1: > SerializationException: Serializing delegates is not supported on this > platform. > > Note: I am having two 2 server nodes and running the POC application on a > client node. > > Regards, > Charlin > > > > On Wed, 24 Aug 2022 at 15:02, Pavel Tupitsyn <ptupit...@apache.org> wrote: > >> Please share the exception with full stack trace (you've only shared some >> warnings, which may or may not be a problem). >> >> On Wed, Aug 24, 2022 at 10:26 AM Charlin S <charli...@hotelhub.com> >> wrote: >> >>> >>> I have a requirement to fetch the data using distributed-computing >>> function and error at >>> var res = >>> CacheInstance.Instance.InstanceObject.GetCompute().Call(calls); >>> >>> // InstanceObject singleton object for Ignite >>> >>> [11:16:34,865][WARNING][main][Marshaller] Type >>> 'System.Collections.Generic.Dictionary`2[System.Int64,Apache.Ignite.Core.Impl.Binary.BinaryFullTypeDescriptor]' >>> implements 'System.Runtime.Serialization.ISerializable'. It will be written >>> in Ignite binary format, however, the following limitations apply: DateTime >>> fields would not work in SQL; sbyte, ushort, uint, ulong fields would not >>> work in DML. >>> [11:16:34,889][WARNING][main][Marshaller] Type >>> 'System.Collections.Generic.Dictionary`2[System.String,System.Byte]' >>> implements 'System.Runtime.Serialization.ISerializable'. It will be written >>> in Ignite binary format, however, the following limitations apply: DateTime >>> fields would not work in SQL; sbyte, ushort, uint, ulong fields would not >>> work in DML. >>> [11:16:34,895][WARNING][main][Marshaller] Type >>> 'System.Func`2[Apache.Ignite.Core.Impl.Binary.BinaryReader,Apache.Ignite.Core.Impl.Compute.ComputeJobHolder]' >>> implements 'System.Runtime.Serialization.ISerializable'. It will be written >>> in Ignite binary format, however, the following limitations apply: DateTime >>> fields would not work in SQL; sbyte, ushort, uint, ulong fields would not >>> work in DML. >>> >>> Kindly help me on this and I have shared the implementation below. >>> >>> public class ComputeTestModel : IBinarizable >>> { >>> >>> [QuerySqlField] >>> public string TestField1 { get; set; } >>> [QuerySqlField] >>> public string TestField2 { get; set; } >>> [QuerySqlField] >>> public string TestField3 { get; set; } >>> >>> >>> public void ReadBinary(IBinaryReader reader){}//not added >>> implementation here >>> public void WriteBinary(IBinaryWriter writer){}//not added >>> implementation here >>> } >>> >>> >>> class TestModelComputeFunc<T> : IComputeFunc<List<ComputeTestModel>> >>> { >>> // [InstanceResource] private readonly IIgnite _ignite; >>> public ICache<string, T> IgniteCache { get; set; } >>> >>> public string _searchCriteria { get; set; } >>> public TestModelComputeFunc(ICache<string, T> igniteCache, >>> string searchCriteria) >>> { >>> IgniteCache = igniteCache; >>> _searchCriteria = searchCriteria; >>> } >>> public List<ComputeTestModel> Invoke() >>> { >>> List<ComputeTestModel> objs = new List<ComputeTestModel>(); >>> string query = "select * from ComputeTestModel where >>> TestField1 = ?"; >>> SqlFieldsQuery fieldsQuery = new SqlFieldsQuery(query, >>> _searchCriteria); >>> IFieldsQueryCursor queryCursor = >>> IgniteCache.Query(fieldsQuery); >>> if (queryCursor != null) >>> { >>> foreach (var cacheEntry in queryCursor) >>> { >>> objs.Add(new ComputeTestModel >>> { >>> TestField1 = cacheEntry[0] as string, >>> TestField2 = cacheEntry[1] as string, >>> TestField3 = cacheEntry[2] as string >>> >>> }); >>> } >>> return objs; >>> >>> } >>> return null; >>> } >>> } >>> } >>> >>> public static class CacheUtilsTest >>> { >>> public static List<ComputeTestModel> ComputeTest_OnIgnite(string >>> searchCriteria) >>> { >>> //CacheInstance.Instance.ComputeTestICache defined in another class >>> public ICache<string, ComputeTestModel> ComputeTestModelICache { get; set; } >>> >>> ComputeTestComputeFunc<ComputeTestModel> calls = new >>> ComputeTestComputeFunc<ComputeTestModel>(CacheInstance.Instance.ComputeTestICache, >>> searchCriteria); >>> >>> // Execute the collection of calls on the cluster. >>> var res = >>> CacheInstance.Instance.InstanceObject.GetCompute().Call(calls); >>> //exception thrown here >>> >>> >>> /* >>> //another aproach >>> ComputeTestComputeFunc<ComputeTestModel> cacheObject = new >>> ComputeTestComputeFunc<ComputeTestModel>(CacheInstance.Instance.ComputeTestICache, >>> searchCriteria); >>> // var calls = CacheInstance.Instance.ComputeTestICache.Select(s => >>> cacheObject).ToList(); >>> >>> // Execute the collection of calls on the cluster. >>> var res = >>> CacheInstance.Instance.InstanceObject.GetCompute().Call(calls); >>> //exception thrown here >>> */ >>> return null; >>> } >>> >>> } >>> >>> >>> class Program >>> { >>> >>> static void Main(string[] args) >>> { >>> // Console.WriteLine("Hello World!"); >>> var saticCache = CacheInstance.Instance.InstanceObject; >>> >>> var res = CacheUtilsTest.ComputeTest_OnIgnite("A"); >>> int ans= res.Count(); >>> Console.ReadKey(); >>> >>> } >>> } >>> >>> Regards, >>> Charlin >>> >>> >>>