gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:46:38 24 4
gpt4 key购买 nike

我有一个托管在 IIS 上的 .net core (3.1) Web 应用程序。我无法弄清楚如何在第一个请求之前运行一段代码。我已完成以下操作:

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

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

提前致谢

最佳答案

What i am missing is where/how i register the code/service that i would like to run before the first request comes in?

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

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

您可以将 IHostApplicationLifetime 注入(inject)到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;
}

结果:

enter image description here

关于asp.net-core - 如何自动启动/预热 IIS 中托管的 .net core Web 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62673836/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com