Faire fonctionner le service en arrière-plan dans IIS même si IIS est inactif

la programmation


J’implémente un service en arrière-plan, le problème est que lorsque je l’exécute en local, il fonctionne bien puisque l’application est opérationnelle. Mais, dans IIS, j’ai déployé du code et démarré le serveur dans IIS. Le service d’arrière-plan ne fonctionne pas tant que je ne parcoure pas le site et devient inactif lorsque le serveur est inactif.

J’ai besoin que le service d’arrière-plan s’exécute au moment même où je redémarre ou démarre le site.

Mon programme.cs :

C#
builder.Services.AddHostedService<FailedEmailManagmentService>();

Je l’ai également enregistré.

Ce que j’ai essayé :

C#
using DocumentFormat.OpenXml.InkML;
using DocumentFormat.OpenXml.Office2016.Drawing.ChartDrawing;
using handbook.Controllers.HR;
using handbook.Data;
using handbook.Models.Mail;
using handbook.Repositories.Implementation;
using handbook.Repositories.Interface;
using handbook.ViewModel;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using System.Configuration;
using System.Globalization;
using System.Linq;

namespace handbook.BackgroundmailService
{
    public class EmailReminderSenderService : IHostedService, IDisposable
    {
        public static IConfiguration Configuration { get; set; }
        private Timer _timer;
        private readonly IOauthMailService _emailSender;
        private readonly ILogger<EmailReminderSenderService> _logger;

        public EmailReminderSenderService(IOauthMailService emailSender,
        ILogger<EmailReminderSenderService> logger, 
        IServiceProvider serviceProvider, IConfiguration configuration)
        {
            _emailSender = emailSender;
            _logger = logger;
            Services = serviceProvider;
            Configuration = configuration;
        }

        public IServiceProvider Services { get; }

        private static TimeSpan getJobRunDelay()
        {
            // Change the delay to run every 10 minutes
            return TimeSpan.FromMinutes(1);
        }

        public void Dispose()
        {
            _timer?.Dispose();
        }

        public Task StartAsync(CancellationToken cancellationToken)
        {
            _logger.LogInformation("Background service is started");
            _timer = new Timer(SendEmails, null, 
                               getJobRunDelay(), getJobRunDelay());
            return Task.CompletedTask;
        }
public async void SendEmails(object state)
        {
            my task
        }
public Task StopAsync(CancellationToken cancellationToken)
        {
            _logger.LogInformation("Background service is stopping");
            _timer?.Change(Timeout.Infinite, 0);
            return Task.CompletedTask;
        }
    }
}

Solution 1

コメント

タイトルとURLをコピーしました