Я использовал Hangfire для многих проектов и у меня не было проблем с ним.Я пытался использовать его в своем новом проекте веб-API (.net core 2.1), но получал исключение Timeout при попытке выполнить BackgroundJob.
Startup.cs (внутри метода ConfigureServices)
services.AddHangfire(x => x.UseSqlServerStorage(Configuration.GetConnectionString("DefaultConnection")));
Startup.cs (внутри метода Configure)
app.UseHangfireServer();
app.UseHangfireDashboard();
Все таблицы зависания были созданы при запуске моего приложения(как это должно).Но когда я пытаюсь использовать BackgroundJob следующим образом:
BackgroundJob.Enqueue(() => emailService.Send(emailDto));
Выдается исключение:
Сообщение об исключении : не удалось создать фоновое задание.Подробности см. Во внутреннем исключении.
Внутреннее сообщение об исключении : истекло время ожидания.Время ожидания истекло до завершения операции, или сервер не отвечает.
Я проверил метод emailService.Send (), и он работает правильно.(Я выполнил его, не используя Hangfire для проверки).
Важное обновление: Я обнаружил, что это проблема, связанная с выполнением BackgroundJob внутри TransactionScope.Когда я переместил эту логику за пределы транзакции, все прекрасно работало.Теперь мне интересно, есть ли способ заставить его работать внутри конкретной области транзакций?