Skocz do zawartości

[Sfera] Wyjątek podczas wystawiania paragonu

Polecane posty

Dzień dobry,

od pewnego czasu podczas wystawiania paragonu przez sferę występuje poniższy wyjątek, nie pojawia się on za każdym razem ale ostatnio jest coraz częściej.

 

Cytat

Resolution of the dependency failed, type = "System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace", name = "(none)".
Exception occurred while: while resolving.
Exception is: ResolutionFailedException - Resolution of the dependency failed, type = "System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace", name = "InsERT.Moria.ModelDanych".
Exception occurred while: while resolving.
Exception is: AggregateException - Wystąpił przynajmniej jeden błąd.
-----------------------------------------------
At the time of the exception, the container was:

  Resolving System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace,InsERT.Moria.ModelDanych

-----------------------------------------------
At the time of the exception, the container was:

  Resolving System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace,(none)

2022-10-07 07:55:42.1279 ERROR Microsoft.Practices.Unity.ResolutionFailedException: Resolution of the dependency failed, type = "System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace", name = "(none)".
Exception occurred while: while resolving.
Exception is: ResolutionFailedException - Resolution of the dependency failed, type = "System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace", name = "InsERT.Moria.ModelDanych".
Exception occurred while: while resolving.
Exception is: AggregateException - Wystąpił przynajmniej jeden błąd.
-----------------------------------------------
At the time of the exception, the container was:

  Resolving System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace,InsERT.Moria.ModelDanych

-----------------------------------------------
At the time of the exception, the container was:

  Resolving System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace,(none)
 ---> Microsoft.Practices.Unity.ResolutionFailedException: Resolution of the dependency failed, type = "System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace", name = "InsERT.Moria.ModelDanych".
Exception occurred while: while resolving.
Exception is: AggregateException - Wystąpił przynajmniej jeden błąd.
-----------------------------------------------
At the time of the exception, the container was:

  Resolving System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace,InsERT.Moria.ModelDanych
 ---> System.AggregateException: Wystąpił przynajmniej jeden błąd. ---> System.OutOfMemoryException: Zgłoszono wyjątek typu 'System.OutOfMemoryException'.
   w System.Linq.Set`1..ctor(IEqualityComparer`1 comparer)
   w System.Linq.Enumerable.<UnionIterator>d__67`1.MoveNext()
   w System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
   w System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   w System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   w System.Data.Entity.Utilities.TypeExtensions.TryGetElementType(Type type, Type interfaceOrBaseType)
   w System.Data.Entity.Infrastructure.DependencyResolution.TransactionContextInitializerResolver.GetService(Type type, Object key)
   w System.Data.Entity.Infrastructure.DependencyResolution.ResolverChain.<>c__DisplayClass5_0.<GetService>b__0(IDbDependencyResolver r)
   w System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   w System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
   w System.Data.Entity.Infrastructure.DependencyResolution.ResolverChain.GetService(Type type, Object key)
   w System.Data.Entity.Infrastructure.DependencyResolution.RootDependencyResolver.GetService(Type type, Object key)
   w System.Data.Entity.Infrastructure.DependencyResolution.ResolverChain.<>c__DisplayClass5_0.<GetService>b__0(IDbDependencyResolver r)
   w System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   w System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
   w System.Data.Entity.Infrastructure.DependencyResolution.ResolverChain.GetService(Type type, Object key)
   w System.Data.Entity.Infrastructure.DependencyResolution.CompositeResolver`2.GetService(Type type, Object key)
   w System.Data.Entity.Infrastructure.DependencyResolution.DbDependencyResolverExtensions.GetService[T](IDbDependencyResolver resolver, Object key)
   w System.Data.Entity.Core.SchemaObjectModel.SchemaElement.CreateMetadataPropertyFromXmlAttribute(String xmlNamespaceUri, String attributeName, String value)
   w System.Data.Entity.Core.SchemaObjectModel.SchemaElement.AddOtherContent(XmlReader reader)
   w System.Data.Entity.Core.SchemaObjectModel.SchemaElement.ParseAttribute(XmlReader reader)
   w System.Data.Entity.Core.SchemaObjectModel.SchemaElement.Parse(XmlReader reader)
   w System.Data.Entity.Core.SchemaObjectModel.StructuredType.HandlePropertyElement(XmlReader reader)
   w System.Data.Entity.Core.SchemaObjectModel.StructuredType.HandleElement(XmlReader reader)
   w System.Data.Entity.Core.SchemaObjectModel.SchemaEntityType.HandleElement(XmlReader reader)
   w System.Data.Entity.Core.SchemaObjectModel.SchemaElement.ParseElement(XmlReader reader)
   w System.Data.Entity.Core.SchemaObjectModel.SchemaElement.Parse(XmlReader reader)
   w System.Data.Entity.Core.SchemaObjectModel.Schema.HandleEntityTypeElement(XmlReader reader)
   w System.Data.Entity.Core.SchemaObjectModel.Schema.HandleElement(XmlReader reader)
   w System.Data.Entity.Core.SchemaObjectModel.SchemaElement.ParseElement(XmlReader reader)
   w System.Data.Entity.Core.SchemaObjectModel.SchemaElement.Parse(XmlReader reader)
   w System.Data.Entity.Core.SchemaObjectModel.Schema.HandleTopLevelSchemaElement(XmlReader reader)
   w System.Data.Entity.Core.SchemaObjectModel.Schema.InternalParse(XmlReader sourceReader, String sourceLocation)
   w System.Data.Entity.Core.SchemaObjectModel.Schema.Parse(XmlReader sourceReader, String sourceLocation)
   w System.Data.Entity.Core.SchemaObjectModel.SchemaManager.ParseAndValidate(IEnumerable`1 xmlReaders, IEnumerable`1 sourceFilePaths, SchemaDataModelOption dataModel, AttributeValueNotification providerNotification, AttributeValueNotification providerManifestTokenNotification, ProviderManifestNeeded providerManifestNeeded, IList`1& schemaCollection)
   w System.Data.Entity.Core.SchemaObjectModel.SchemaManager.ParseAndValidate(IEnumerable`1 xmlReaders, IEnumerable`1 sourceFilePaths, SchemaDataModelOption dataModel, DbProviderManifest providerManifest, IList`1& schemaCollection)
   w System.Data.Entity.Core.Metadata.Edm.EdmItemCollection.LoadItems(IEnumerable`1 xmlReaders, IEnumerable`1 sourceFilePaths, SchemaDataModelOption dataModelOption, DbProviderManifest providerManifest, ItemCollection itemCollection, Boolean throwOnError)
   w System.Data.Entity.Core.Metadata.Edm.EdmItemCollection..ctor(IEnumerable`1 xmlReaders)
   w InsERT.Mox.Runtime.DataAccessLayerModule.<>c__DisplayClass44_0.<CreateMetadataWorkspace>b__3()
   w System.Threading.Tasks.Task.InnerInvoke()
   w System.Threading.Tasks.Task.Execute()
   --- Koniec śladu stosu wyjątków wewnętrznych ---
   w System.Threading.Tasks.Task.FastWaitAll(Task[] tasks)
   w System.Threading.Tasks.Parallel.Invoke(ParallelOptions parallelOptions, Action[] actions)
   w System.Threading.Tasks.Parallel.Invoke(Action[] actions)
   w InsERT.Mox.Runtime.DataAccessLayerModule.CreateMetadataWorkspace(IUnityContainer unity)
   w Microsoft.Practices.Unity.InjectionFactory.<>c__DisplayClass2.<.ctor>b__0(IUnityContainer c, Type t, String s)
   w Microsoft.Practices.ObjectBuilder2.FactoryDelegateBuildPlanPolicy.BuildUp(IBuilderContext context)
   w Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context)
   w Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)
   w Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name, IEnumerable`1 resolverOverrides)
   --- Koniec śladu stosu wyjątków wewnętrznych ---
   w Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name, IEnumerable`1 resolverOverrides)
   w Microsoft.Practices.Unity.UnityContainer.Resolve(Type t, String name, ResolverOverride[] resolverOverrides)
   w Microsoft.Practices.Unity.UnityContainerExtensions.Resolve[T](IUnityContainer container, String name, ResolverOverride[] overrides)
   w InsERT.Mox.Runtime.DataAccessLayerModule.ResolveMetadataWorkspaceForThisAssembly(IUnityContainer unity)
   w Microsoft.Practices.Unity.InjectionFactory.<>c__DisplayClass2.<.ctor>b__0(IUnityContainer c, Type t, String s)
   w Microsoft.Practices.ObjectBuilder2.FactoryDelegateBuildPlanPolicy.BuildUp(IBuilderContext context)
   w Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context)
   w Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)
   w Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name, IEnumerable`1 resolverOverrides)
   --- Koniec śladu stosu wyjątków wewnętrznych ---
   w Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name, IEnumerable`1 resolverOverrides)
   w Microsoft.Practices.Unity.UnityContainer.Resolve(Type t, String name, ResolverOverride[] resolverOverrides)
   w Microsoft.Practices.Unity.UnityContainerExtensions.Resolve(IUnityContainer container, Type t, ResolverOverride[] overrides)
   w InsERT.Mox.Runtime.Unity.UnityAdapter.GetObject(Type t)
   w InsERT.Mox.Runtime.IInjectionContainerExtensions.GetMetadataWorkspace(IInjectionContainer container)
   w InsERT.Moria.Sfera.Uchwyt.7TE=(String login)
   w InsERT.Moria.Sfera.Uchwyt.ZalogujOperatora(String login, String haslo)
 

 

 

Ostatni wyjątek OutOfMemoryException wskazuje na brak pamięci, ale można powiedzieć że mamy jej aż naddto

image.png.30bcad9aefcfaa72e8f4d44d79fdbbe3.png

 

 

 

Schemat dzialania programu jest nastepujący

Zaloguj się do sfery => przekształć zk na pa => wydrukuj pa => wyloguj się

 

Ostatni komunikat wskazuje na to że bąd wystąpił już podczas logowania, ale jak wykonuję inne operacje typu "dodaj zk" to ten probem nie występuje

 

 

 

Link to postu
  • 1 miesiąc temu...

Przeanalizowaliśmy otrzymany kod i mamy kilka spostrzeżeń.

Po pierwsze podpinają się Państwo do zdarzeń obiektu typu IFiskalizacjaDokumentu (PrzyjetoPolecenieFiskalizacji, FiskalizacjaZablokowana, RozpoczetoFiskalizacje, ZakonczonoFiskalizacje) lecz nie ma nigdzie w kodzie zapewnionego odpowiedniego odpinania event handlerów (operator -=). Ze względu na to, że obiekt IFiskalizacjaDokumentu jest singletonem (zawsze jest pobierana ta sama instancja tego obiektu) to po kilku wywołaniach wspomnianej operacji jest tam podpięte tyle samo event handlerów.

Druga sprawa to uruchamianie sfery za każdym razem przed wywołaniem operacji dodawania dokumentu. Czy sprawdzali Państwo fakt wywoływania Dispose na obiekcie uchwytu do sfery? Czy wywołuje się to za każdym razem? Jeśli nie to jest to potencjalna przyczyna problemów z pamięcią. Najlepiej trzymać w swoim rozwiązaniu jeden uchwyt do sfery i Dispose'ować go gdzieś w momencie zamknięcia aplikacji. Pozwoli to na łatwiejsze unikanie problemów z pamięcią, a dodatkowo przyspieszy działanie aplikacji ze względu na to, że uruchamianie sfery ma swój narzut wydajnościowy. W Państwa kodzie Dispose'owanie uchwytu wykonywane jest w event-handlerze podpiętym do zdarzenia ZakonczonoFiskalizacje co jest ryzykowne ponieważ wystarczy, że coś się nie powiedzie wcześniej i mamy wyciek pamięci.

Trzecie spostrzeżenie to brak Dispose'owania uchwytu do sfery w przypadku gdy nie uda się zalogować operatora (rzucany jest wyjątek, ale uchwyt nie jest Dispose'owany).

Link to postu

I jeszcze jedno miejsce z potencjalnym wyciekiem pamięci - w przypadku gdy nie zostanie odnalezione zamówienie od klienta bądź jego status jest inny niż rezerwacja stanu to sfera również nie jest Dispose'owana. Poza tym - nie ma w tym miejscu konieczności pobierania obiektu biznesowego zamówienia (IZamowienieOdKlienta) wystarczy pobrać samą encję:

zamowienia.Dane.Wszystkie()
.Where(z => z.NumerWewnetrzny.PelnaSygnatura == dane.nr)
.FirstOrDefault()

 

Link to postu
×
×
  • Dodaj nową pozycję...