2015-04-28 4 views
2

Я использую Hangfire в проекте ASP.NET MVC 5, который использует Ninject для использования того же Контекста в RequestScope.Hangfire и ASP.NET MVC

В замедленном воспламенении приборной панели, я получаю случайные ошибки, как:

System.Data.Entity.Core.EntityException: произошла ошибка при запуске транзакции на связи провайдера. Подробнее см. Внутреннее исключение. ---> System.Data.SqlClient.SqlException: новая транзакция не разрешена, потому что в сеансе есть другие потоки.

Как я могу заставить Entity, ASP.NET и Hangfire работать без получения всех этих ошибок транзакций?

Бьюсь об заклад, эти ошибки могут произойти с другой стороны (в сети).

ответ

2

Мы также столкнулись с некоторыми проблемами, такими как Hangfire вместе с Ninject. Поэтому мы фактически создаем отдельное ядро ​​для Hangfire, где все связано с областью потоков. Нечто подобное:

public class NinjectHangfire 
{ 
    public static IKernel CreateKernelForHangfire() 
    { 
     var kernel = new StandardKernel(/*modules*/); 
     try 
     { 
      kernel.Bind<Func<IKernel>>().ToMethod(ctx =>() => new Bootstrapper().Kernel).InThreadScope(); 
      kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>().InThreadScope(); 
      //other bindings 
     } 
     catch 
     { 
      kernel.Dispose(); 
      throw; 
     } 
    } 
} 

и затем в запуске:

GlobalConfiguration.Configuration.UseNinjectActivator(NinjectHangfire.CreateKernelForHangfire());