Я кодировал службу Ignite .Net в C #, которая работает на Linux / NET Core 2.2.Сейчас я пытаюсь использовать его в веб-приложении .Net Framework.
Ignition.ClientMode = true;
var igniteCfg = new IgniteConfiguration()
{
IgniteHome = System.Web.HttpContext.Current.Server.MapPath(@"~\bin\")
};
using (var ignite = Ignition.Start(igniteCfg))
{
var services = ignite.GetServices();
IQuoteGeneratorContract proxy = services.GetServiceProxy<IQuoteGeneratorContract>("QuoteService");
quotes = proxy.GenerateQuotes(quoteRequestMapped);
}
Однако при вызове Ignition возникает странное исключение:
Type 'Domain.ElasticCachedReference`1[[Domain.Partner, Utility.Click.Domain, Version=3.10.56.40, Culture=neutral, PublicKeyToken=null]]' in Assembly 'Utility.Click.Domain, Version=3.10.56.40, Culture=neutral, PublicKeyToken=null' is not marked as serializable.
Stack Trace:
Server stack trace:
at System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type)
at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
at System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context)
at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo()
at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter, SerializationBinder binder)
at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo)
at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck)
at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck)
at System.Runtime.Remoting.Channels.CrossAppDomainSerializer.SerializeMessageParts(ArrayList argsToSerialize)
at System.Runtime.Remoting.Messaging.SmuggledMethodCallMessage..ctor(IMethodCallMessage mcm)
at System.Runtime.Remoting.Messaging.SmuggledMethodCallMessage.SmuggleIfPossible(IMessage msg)
at System.Runtime.Remoting.Channels.CrossAppDomainSink.SyncProcessMessage(IMessage reqMsg)
Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at System._AppDomain.CreateInstanceFrom(String assemblyFile, String typeName)
at Apache.Ignite.Core.Impl.Unmanaged.Jni.Jvm.GetCallbacksFromDefaultDomain()
at Apache.Ignite.Core.Impl.Unmanaged.Jni.Jvm..ctor(IntPtr jvmPtr)
at Apache.Ignite.Core.Impl.Unmanaged.Jni.Jvm.GetOrCreate(IList`1 options)
at Apache.Ignite.Core.Impl.IgniteManager.CreateJvmContext(IgniteConfiguration cfg, ILogger log)
at Apache.Ignite.Core.Ignition.Start(IgniteConfiguration cfg)
at Domain.ServiceAdapters.QuoteServiceAdapter.GenerateQuotes(IEnumerable`1 products, Tender tender, Dictionary`2 customCPs) in C:\Users\alexavrutin\Projects\utilityclick\src\Domain\-Logic\ServiceAdapters\QuoteServiceAdapter.cs:line 54
at Domain.Tender.Submit(Object shardingKey, TenderOptions tenderOptions, Boolean isSkipRecalcManualQuotes, Dictionary`2 customCPs, Boolean forceGenerateSMEQuotes) in C:\Users\alexavrutin\Projects\utilityclick\src\Domain\-Logic\Tender.cs:line 616
Я должен сказать, что сообщение об исключении абсолютно верно: тип Domain.ElasticCachedReference действительно не помечен как [Serializable].Однако я не использую этот тип в любом сервисе Ignite и не храню его в кэше Ignite.Я просто пытаюсь запустить Ignite в том же приложении, где этот класс определен и используется, и, в конце концов, я только запускаю Ignite и еще не вызываю какую-либо службу или не выполняю распределенное закрытие.
Я рассмотрел исходный код Ignite и подозреваю, что исключение выдается в методе Net Framework и, вероятно, связано с тем, как тип создается экземпляром Activator, а не с самим Ignite.Однако мне интересно, как я могу предотвратить возникновение этого исключения?Спасибо!
На компьютере, на котором работает клиент, используется следующее программное обеспечение: Windows 10 Pro, Visual Studio 2017, C # 7.1, Net Framework 4.7.1 с ASP.NET, Apache Ignite .Net 2.7 * 1014.*