Làm cho dịch vụ nền chạy trong IIS ngay cả khi IIS không hoạt động

lập trình


Tôi đang triển khai một dịch vụ nền, vấn đề là khi tôi chạy nó ở địa phương, nó hoạt động tốt vì ứng dụng được nhấn và chạy. Tuy nhiên, trong IIS, tôi đã triển khai mã và khởi động máy chủ trong IIS. Dịch vụ nền không chạy cho đến khi tôi duyệt trang web và không hoạt động khi máy chủ không hoạt động.

Tôi cần dịch vụ nền chạy ngay khi tôi khởi động lại hoặc khởi động trang web.

Chương trình của tôi.cs:

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

Tôi cũng đã đăng ký nó.

Những gì tôi đã thử:

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

Giải pháp 1

コメント

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