首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何自动启动/预热IIS中托管的.net核心web应用程序

如何自动启动/预热IIS中托管的.net核心web应用程序
EN

Stack Overflow用户
提问于 2020-07-01 09:31:43
回答 1查看 2.4K关注 0票数 2

我有一个.net核心(3.1) web应用程序,它是托管在IIS上的。我不知道如何在第一个请求之前运行一段代码。我做了以下工作:

  • 在网站

上设置了应用程序池= "AlwaysRunning“和”空闲超时“=0

  • 的‘启动模式’= true。

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

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2020-07-02 07:27:07

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

如果您想在应用程序完全启动后调用您的mvc或web之一,则可以为您的web应用程序进行热身。您可以尝试使用IHostApplicationLifetime的ApplicationStarted方法。

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

您可以将IHostApplicationLifetime注入配置()方法,然后为ApplicationStarted编写回调,当应用程序主机完全启动时将触发回调。

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

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

代码语言:javascript
运行
复制
    public void ConfigureServices(IServiceCollection services)
    {
         
        services.AddHttpClient();

        services.AddControllersWithViews();


    }

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

代码语言:javascript
运行
复制
  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;
    }

结果:

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62673836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档