即使iis空闲,如何让后台服务在iis中运行

问题描述 投票:0回答:1

我正在实现一个后台服务,问题是当我在本地运行它时,它工作正常,因为应用程序已启动并正在运行。但在iis中我部署了代码并在iis中启动了服务器。后台服务不会运行,直到我浏览网站并在服务器空闲时变得空闲

我的程序。 CS builder.Services.AddHostedService();

我也注册了

主要问题是我无法创建 Windows 服务或控制台应用程序,因为我的组织未批准它。

```
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;
        }
    }
}
```
.net-6.0 backgroundworker iis-8
1个回答
0
投票

IIS 通常不会自行启动后台服务,它依赖于触发应用程序启动的请求。目前,您可以将 IIS 配置为始终运行该站点,但这不是一个好的解决方法。

为了保持后台服务运行,您可能需要寻找替代方案;毕竟,IIS 是为托管 Web 应用程序而不是长时间运行的后台服务而设计的。

您提到您的组织不批准创建 Windows 服务,但您可能希望与您的 IT 部门讨论此事。将应用程序托管为 Windows 服务是在 Windows 计算机上运行长期后台进程的最常见方法。

© www.soinside.com 2019 - 2024. All rights reserved.