2010-10-01 11 views
6

Właśnie zaktualizowałem istniejącą implementację programu Ninject z wersji 1.5 do 2.0. Teraz widzę sporadyczny wyjątek, który pojawia się, gdy wiele żądań pojawia się w krótkim czasie.Wyrzucony wyjątek Intermittent związany z OnePerRequestModule

Oto wyjątek, który jest wyrzucany.

Typ: System.ArgumentException
Wiadomość: Element z tym samym kluczem został już dodany.
Źródło: Ninject
stosu Ślad: w System.ThrowHelper.ThrowArgumentException (ExceptionResource zasobów)
na System.Collections.Generic.Dictionary ` 2.Włóż (klawisz TKey wartość TValue, Boolean) Dodaj
w System.Collections.Generic.Dictionary ` 2.Dodaj zdjęcia (klucz TKey, wartość TValue)
w Ninject.Components.ComponentContainer.CreateNewInstance (Component Type, wdrażania typ)
w Ninject.Components.ComponentContainer.ResolveInstance (Component Type Wdrożenie typu)
w firmie Ninject.Components.ComponentContainer.Get (Komponent typu)
w produkcie Ninject.Components.ComponentContainer. <CreateNewInstance> b _ _ 6 (parametr ParameterInfo)
w System.Linq.Enumerable.WhereSelectArrayIterator ` 2.MoveNext()
w System.Linq.Buffer ` 1..ctor (IEnumerable ` 1 źródło)
W układzie .Linq.Enumerable.ToArray [TSource] (IEnumerable ` 1 źródło)
w Ninject.Components.ComponentContainer.CreateNewInstance (składnik typu, realizacja Type)
w Ninject.Components.ComponentContainer.ResolveInstance (składnik typu, realizacja Type)
na Ninject.Components.ComponentContainer.Get (składnik Type)
w Ninject.Components.ComponentContainer.GetT
w Ninject.KernelBase.CreateContext (Żądanie IRequest, IBinding wiązania)
w Ninject.KernelBase. < > c _ _ DisplayClassa. < Rozwiąż > b _ _ 6 (Powiązanie wiązania)
w System.Linq.Ocountable. < > C _ _ DisplayClass12 ` 3. <CombineSelectors> b _ _ 11 (TSource x)
w System.Linq.Enumerable.WhereSelectEnumerableIterator ` 2.MoveNext()
w System.Linq.Enumerable. <CastIterator> d _ _ aa ` 1.MoveNext()
w System.Linq.Enumerable.Single [TSource] (IEnumerable ` 1 źródła)
w Ninject.ResolutionExtensions.Pierwsze [T] (IResolutionRoot korzeń, [] Parametry IParameter)
na NameOfConsumingSite .application _ BeginRequest (nadawca obiektu, EventArgs e) ...

Wyjątkiem nie trafiają jeśli usunąć OnePerRequestModule pozycja od httpModules w pliku web.config, ale jest to dodanie ton kosztów ogólnych.

Dziękuję każdemu z góry, jeśli mogą pomóc!

+0

Coś ciekawego na temat wiązań? Czy jest to stos niejawnych powiązań klasowych? Zasadniczo to powinno po prostu zadziałać. Czy masz wersję bagażnika lub masz jakieś pliki binarne? –

+0

Nic nadzwyczajnego, to te same wiązania, które działały bezbłędnie w wersji 1.5. Ponadto używam bieżącego pliku binarnego. Sean Chambers z grupy Ninject Google sugeruje, że OnePerRequestModule jest przestarzałe, ponieważ metody InXxxxScope spełniają tę odpowiedzialność. Pozostaje bez odpowiedzi, dlaczego OnePerRequestModule jest nadal uwzględnione w rozwiązaniu Ninject. Zastanawiam się również, czy może to być spowodowane stanem wyścigowym z GarbageCollectionCachePruner. – reifnir

Odpowiedz

3

Wystąpił problem z wielowątkowością. Spróbuj użyć sterownika RC1 2.2 znajdującego się pod adresem https://github.com/ninject. Proszę powiedzieć, czy ten problem nadal występuje w tej wersji, aby upewnić się, że nie mamy dalszych problemów, które musimy naprawić przed wydaniem.

+1

Opisano konkretny problem (z krokami do odtworzenia) tutaj: https://github.com/ninject/ninject/issues/closed#issue/17. Zostało to naprawione w wersji 2.1.0.70. –

Powiązane problemy