Фоновый сервис в приложении ASP.NET Core

У меня есть API, созданный с использованием ASP.NET Core 2.1, который выполняет некоторые основные операции CRUD.

Это своего рода приложение конвейера выпуска, посвященное нашим внутренним процессам. Это работает следующим образом:

  1. Пользователь запрашивает перезагрузку данных (POST)
  2. Пользователь одобряет перезагрузку данных (POST)
  3. Пользователь запускает пакет SSIS в базе данных, который инициирует перезагрузку данных (POST)
  4. Фоновый процесс проверяет состояние этого пакета служб SSIS и после его завершения устанавливает состояние перезагрузки в состояние выполнено / не выполнено

Наша первоначальная идея состояла в том, чтобы создать фоновый сервис, который будет периодически запрашивать базу данных и проверять текущий статус пакета служб SSIS, а затем обновлять нашу сущность до желаемого состояния (выполнено / не выполнено).

Однако это не работает, потому что любая другая служба находится в области действия, в то время как фоновая служба является одиночной.

Что может быть альтернативой для запуска этой фоновой службы, чтобы поддерживать правильное состояние моей сущности? Отдельный проект?

0 ответов

Недавно я создал фоновую службу в своем API, и для меня работает следующее решение:

  1. В конструкторе класса фоновой службы добавьте IServiceProvider в качестве зависимости:

    private readonly IServiceProvider _serviceProvider;
    
    public MyBackgoundService(IServiceProvider serviceProvider)
    {
         _serviceProvider = serviceProvider;
    
    }
    
  2. В коде реализации используйте поставщика услуг для внедрения контекста базы данных или репозитория.

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {        
        while(!stoppingToken.IsCancellationRequested){
    
                using var scope = _serviceProvider.CreateScope();
                var context = scope.ServiceProvider.GetRequiredService<MyDbContext>();
    
         }
    }
    
Другие вопросы по тегам