У нас есть ASP. NET API, который получает много запросов в день, а это сотни тысяч в день. При высокой нагрузке я заметил, что около 5% запросов приведет к ошибке. Ниже приведена трассировка стека, которую мы видим для каждой из этих ошибок:
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)
Этот API довольно маленький, у нас только один тип регистрируется в нашем файле WebAPIConfig. Вот как регистрируется тип:
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 }
);
}
Любое понимание будет оценено, я не уверен, какие другие примеры кода следует включить, потому что эта ошибка, похоже, не из моего кода, а изнутри единства рамки.