تشغيل خدمة الخلفية في IIS حتى لو كان IIS خاملاً

برمجة


أقوم بتنفيذ خدمة في الخلفية، والمشكلة هي عندما أقوم بتشغيلها محليًا، فهي تعمل بشكل جيد منذ تشغيل التطبيق. ولكن، في IIS، قمت بنشر التعليمات البرمجية وبدأت تشغيل الخادم في IIS. خدمة الخلفية لا تعمل حتى أقوم بتصفح الموقع وتصبح خاملة عندما يكون الخادم خاملاً.

أحتاج إلى تشغيل خدمة الخلفية في نفس اللحظة التي أقوم فيها بإعادة تشغيل الموقع أو تشغيله.

برنامجي.cs:

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

لقد قمت بتسجيله أيضا.

ما حاولت:

ج#
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

コメント

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