We have a ASP.NET API that gets many requests per day, up in the hundreds of thousands per day. Under high load, I have noticed that about 5% of requests will result in an error. Below is the stack trace we see for each one of these errors:
System.IndexOutOfRangeException:
at System.Collections.Generic.Dictionary`2.Insert (mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)
at Unity.Lifetime.HierarchicalLifetimeManager.SynchronizedSetValue (Unity.Abstractions, Version=2.3.1.0, Culture=neutral, PublicKeyToken=6d32ff45e0ccc69f)
at Unity.Lifetime.SynchronizedLifetimeManager.SetValue (Unity.Abstractions, Version=2.3.1.0, Culture=neutral, PublicKeyToken=6d32ff45e0ccc69f)
at Unity.ObjectBuilder.Strategies.LifetimeStrategy.PostBuildUp (Unity.Container, Version=5.3.2.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0)
at Unity.Container.StrategyChain.BuildUp (Unity.Container, Version=5.3.2.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0)
at Unity.Policy.BuildPlanPolicyExtensions.ExecuteBuildUp (Unity.Abstractions, Version=2.3.1.0, Culture=neutral, PublicKeyToken=6d32ff45e0ccc69f)
at Unity.ObjectBuilder.BuilderContext.NewBuildUp (Unity.Container, Version=5.3.2.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0)
at lambda_method (Anonymously Hosted DynamicMethods Assembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null)
at Unity.ObjectBuilder.BuildPlan.DynamicMethod.DynamicBuildPlanGenerationContext+<>c__DisplayClass16_0.<GetBuildMethod>b__0 (Unity.Container, Version=5.3.2.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0)
at Unity.ObjectBuilder.Strategies.BuildPlanStrategy.PreBuildUp (Unity.Container, Version=5.3.2.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0)
at Unity.Container.StrategyChain.BuildUp (Unity.Container, Version=5.3.2.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0)
at Unity.Policy.BuildPlanPolicyExtensions.ExecuteBuildUp (Unity.Abstractions, Version=2.3.1.0, Culture=neutral, PublicKeyToken=6d32ff45e0ccc69f)
at Unity.UnityContainer.BuildUp (Unity.Container, Version=5.3.2.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0)
This API is pretty small, we only have one type getting registered in our WebAPIConfig file. Here is how the type is registered:
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
var container = new UnityContainer();
container.RegisterType<IDataAdapter, APIDataAdapter>(new HierarchicalLifetimeManager());
config.DependencyResolver = new UnityResolver(container);
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
Any insight would be appreciated, I'm not sure what other code examples to include because this error does not appear to be coming from my code, but from inside of the Unity framework.