Я создал ASP.NET WebAPI .NET framework 4.5. Ninject 3.2.00 MicroSoft.OWIN 3.0.10Возможная проблема одновременного запроса OWIN и Ninject?
API развернуты в IIS 7-
Наш Owin класс запуска выглядит следующим образом:
public class Startup
{
public void Configuration(IAppBuilder app)
{
var config = GlobalConfiguration.Configuration;
WebApiConfig.Register(config);
NinjectConfig.Register(app, config);
}
}
И NinjectConfig.cs Посмотрите, как
public class NinjectConfig
{
public static void Register(IAppBuilder app, HttpConfiguration config)
{
app.UseNinjectMiddleware(CreateKernel)
.UseNinjectWebApi(config);
}
private static IKernel CreateKernel()
{
var kernel = new StandardKernel();
kernel.Load("XYZ.*.dll");
return kernel;
}
}
Опознается следующая ошибка:
Если по меньшей мере два одновременных вызова выполняются в api после обновления AppPool, один из двух одновременных вызовов завершается с ошибкой через секунду с ошибкой, а другой - через 3 секунды после запуска. Все последующие вызовы выполняются успешно, параллельно или последовательно.
Проблема не возникает, когда один запрос после рециркуляции AppPool
StackTrace:
{
"Message":"An error has occurred.",
"ExceptionMessage":"An error occurred when trying to create a controller of type 'TestController'. Make sure that the controller has a parameterless public constructor.",
"ExceptionType":"System.InvalidOperationException",
"StackTrace":" at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request,
HttpControllerDescriptor controllerDescriptor,
Type controllerType)\r\n at System.Web.Http.Controllers.HttpControllerDescriptor.CreateController(HttpRequestMessage request)\r\n at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()",
"InnerException":{
"Message":"An error has occurred.",
"ExceptionMessage":"Type 'Test.XYZ.Api.Controllers.TestController' does not have a default constructor",
"ExceptionType":"System.ArgumentException",
"StackTrace":" at System.Linq.Expressions.Expression.New(Type type)\r\n at System.Web.Http.Internal.TypeActivator.Create[TBase](Type instanceType)\r\n at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage request,
Type controllerType,
Func`1& activator)\r\n at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request,
HttpControllerDescriptor controllerDescriptor,
Type controllerType)"
}
Мы интересно, если это какой-то проблемы параллелизма при загрузке Ninject зависимостей. Может ли кто-нибудь помочь нам с тем, что может быть проблемой, или если что-то не так с нашим классом Startup?
Спасибо, это работает для меня. –