如何预热托管在 IIS 中的 asp.net 核心应用程序(a)在网站重启和(b)重新部署时?

phi*_*-fx 3 c# iis asp.net-core

我在 IIS 中托管了一个 asp.net core 2.0 应用程序。该应用程序仅在至少一个网络请求被发送到网站时启动。但是,我需要在应用程序 (a) 在 IIS 中重新启动和 (b) 在重新部署(发布到文件夹)时启动该应用程序。通过“开始”我的意思Startup是构造了类并调用了它的 ConfigureServices(...) 和 Configure(...) 方法,因为我已经配置了一些需要在 Web 主机启动后立即实例化的单例服务开始而不是在第一个 Web 请求进入时立即启动。

这是我的应用程序的入口点:

public class Program
{
    public static void Main(string[] args)
    {
        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Debug()
            .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
            .Enrich.FromLogContext()
            .WriteTo.File("log.txt", rollOnFileSizeLimit: true, fileSizeLimitBytes: 10485760, retainedFileCountLimit: 10) // 10485760 Bytes = 10Megabytes
            .CreateLogger();

        try
        {
            Log.Information("Starting web host");
            BuildWebHost(args).Run();
        }
        catch (Exception ex)
        {
            Log.Fatal(ex, "Host terminated unexpectedly");
        }
        finally
        {
            Log.CloseAndFlush();
        }

    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .Build();
}
Run Code Online (Sandbox Code Playgroud)

Tom*_*sek 5

有许多选项可以自动向您的 Web 应用程序发送 HTTP 请求。

  • Uptimerobot是许多免费的第三方服务之一,它会定期向您的 Web 应用程序发送请求。
  • 创建并托管您自己的 Windows 服务(假设您倾向于 Microsoft 解决方案),以您希望的任何频率访问您的 Web 服务。
  • 创建一个带有计时器触发器的 Azure 函数(或 AWS Lambda),以您希望的任何频率访问您的 Web 服务。
  • 使用Azure DevOps等工具设置发布,其中包含向 Web 应用程序发送请求的发布后任务。
  • 安装并配置IIS 应用程序初始化模块以执行预热任务。