BasiC2k
@BasiC2k
.NET developer (open to job offers)

Почему прекращается работа BackgroundService?

Имеется приложение ASP NET Core (сайт), размещённое на веб сервере IIS.
Приложение, с помощью BackgroundService запускает headless экземпляр CefSharp с определённой страницей (открывается web клиент whatsapp).
Пользователь, в процессе работы с основным сайтом, передаёт команды, которые затем выполняются в CefSharp.
Обнаружил по логам, что примерно через час отсутствия активностей, при повторном обращении к сайту, происходит перезапуск BackgroundService. Следовательно BackgroundService в какой-то момент перестаёт работать, что для меня неожиданно, т.к. BackgroundService как раз и нужен для выполнения постоянных задач.

Как можно заставить работать BackgroundService постоянно?

упрощённый код:
Program.cs


builder.Services.AddHostedService<WhatsappService>();




WhatsappService.cs


public class WhatsappService : BackgroundService {
    public static ChromiumWebBrowser WebView;       
    private static System.Timers.Timer TimerSend; // timer 
    
    // init
    public WhatsappService() {
        TimerSend =           new(10000);
        TimerSend.Elapsed +=  OnTimedSendEvent;
        TimerSend.AutoReset = true;
        TimerSend.Enabled =   true;
    }

    // start Background service
    protected override async Task ExecuteAsync(CancellationToken stoppingToken) {
        await StartWhatsapp(); // start Whatsapp Service
    }

    // start Whatsapp Service
    private async Task<Result> StartWhatsapp() {
        if(!Cef.IsInitialized ) {
		        // Cef.Initialize
        }
		
	      WebView = new("https://web.whatsapp.com/"); // goto whatsapp page

        return result;
    }
}


  • Вопрос задан
  • 83 просмотра
Пригласить эксперта
Ответы на вопрос 3
AshBlade
@AshBlade Куратор тега C#
Просто хочу быть счастливым
Скорее всего проблема в самом WhatsApp. Он сам выходит из сессии, если активностей не было.
Но как я понял, логаут происходит после 30 минут, а не 1 часа без активности
https://www.roadlesstraveledstore.com/can-i-automa...
Ответ написан
@mvv-rus
Настоящий админ AD и ненастоящий программист
Работа фонового сервиса у вас прекращается потому что у его метод ExecuteAsync дожидается инициализации статической переменной WebView (она содержит ChromiumWebBrowser, открытый на странице https://web.watsapp.com) а потом ничего не ждет, а просто завершается. А что там у вас происходит с браузером, код вашего фонового сервиса не контролирует.
PS Я не вижу ваш остальной код, но могу предположить, что вам для работы программы этот фоновый сервис не нужен, т.к. вся работа с экземпляром CefSharp идет через упомянутую статическую переменную.
Ответ написан
BasiC2k
@BasiC2k Автор вопроса
.NET developer (open to job offers)
Разобрался самостоятельно, но всё-равно благодарен за помощь.
Причина прекращения работы BackgroundService заключалась в том, что одна из dll headless CefSharp выдавала исключение и процесс падал. Перезапуск выполнялся при обращении к сайту.
Решение - создание Desktop App для использования headless CefSharp и обеспечение взаимодействия ASP NET Core App <-> Desktop App
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы