2016-04-19 4 views
2

Я создал 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?

ответ

1

Я установил подобный вопрос, используя код, указанный на https://stackoverflow.com/a/35048937

IKernel kernel = CreateKernel(); 

app.UseNinjectMiddleware(() => kernel) 
      .UseNinjectWebApi(config); 

Вы можете попробовать выше код в NinjectConfig.Register()

+0

Спасибо, это работает для меня. –

Смежные вопросы