【解決方法】IIS がアイドル状態でもバックグラウンド サービスを IIS で実行するようにする

プログラミングQA

[ad_1]

バックグラウンド サービスを実装していますが、問題はローカルで実行すると、アプリがヒットして実行されるため、正常に動作することです。 ただし、IIS ではコードをデプロイし、IIS でサーバーを起動しました。 バックグラウンド サービスはサイトを閲覧するまで実行されず、サーバーがアイドル状態になるとアイドル状態になります。

サイトを再起動または開始した瞬間にバックグラウンド サービスを実行する必要があります。

私のプログラム.cs:

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

私も登録させていただきました。

私が試したこと:

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;
        }
    }
}

解決策 1

[ad_2]

コメント

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