[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]
コメント