如何自动启动/预热 IIS 中托管的 .net core Web 应用程序

2023-12-19

我有一个 .net core (3.1) Web 应用程序,托管在 IIS 上。我无法弄清楚如何在第一个请求之前运行一段代码。我做了以下事情:

  • 设置应用程序池的“启动模式”=“AlwaysRunning”和“空闲超时”= 0
  • 在网站上设置“预加载已启用”= true

我缺少的是在第一个请求到来之前在哪里/如何注册我想要运行的代码/服务?

提前致谢


我缺少的是在第一个请求到来之前在哪里/如何注册我想要运行的代码/服务?

如果您想在应用程序完全启动后调用 mvc 或 web api 之一来预热您的 web 应用程序。您可以尝试使用 IHostApplicationLifetime 的 ApplicationStarted 方法。

该方法将在应用程序启动后立即调用。

您可以将 IHostApplicationLifetime 注入到 Configure() 方法中,然后编写 ApplicationStarted 的回调,该回调将在应用程序主机完全启动时触发。

更多细节,您可以参考下面的例子:

在Startup.cs的ConfigureServices方法中注册httpclient服务

    public void ConfigureServices(IServiceCollection services)
    {
         
        services.AddHttpClient();

        services.AddControllersWithViews();


    }

在Configure方法中添加lifetime.ApplicationStarted.Register回调:

  public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHostApplicationLifetime lifetime)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        app.UseStaticFiles();


        app.UseRouting();
        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {               
            endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Default}/{action=Index}/{id?}");             

        });

        IHttpClientFactory httpClientFactory = app.ApplicationServices.GetService(typeof(IHttpClientFactory)) as IHttpClientFactory;

        lifetime.ApplicationStarted.Register(onApplicationStartedAsync(httpClientFactory).Wait);
    }

  

    private async Task<Action> onApplicationStartedAsync(IHttpClientFactory httpClientFactory)
    {

        var httpclient = httpClientFactory.CreateClient();

        var httpMessage = new HttpRequestMessage(HttpMethod.Get, "http://localhost:5000/api/values");

        var httpresponse = await httpclient.SendAsync(httpMessage);

        if (httpresponse.IsSuccessStatusCode)
        {
            string res = await httpresponse.Content.ReadAsStringAsync();
        }

        return null;
    }

Result:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何自动启动/预热 IIS 中托管的 .net core Web 应用程序 的相关文章

随机推荐