[英]How to configure ApplicationInsightsTelemetry, in .NET Core Web Api
[英].Net core web api configure services before Startup is called
我正在创建 .net core 3.1 web api 应用程序。 默认情况下,它被配置为使用带有Startup
文件的IHostBuilder
进行一些配置
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
我想在我的Startup
文件中添加一些配置(事件生成),问题是它们不会在应用程序启动时执行,而只会在 api 收到第一个请求时执行。 这意味着我的托管应用程序在收到请求之前将无法处理事件。 所以问题是:如何在应用程序启动时从Startup
文件调用配置方法,或者如何进行将在应用程序启动时执行的特定配置?
使用您的Program.Main
入口点。
修改这个自动生成的代码:
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
到:
public static void Main(string[] args)
{
var host = CreateHostBuilder(args).Build();
// Use DI via host.Services:
var myConfiguredService = host.Services.GetRequiredService<SomeService>();
myConfiguredService.DoSomething();
host.Run();
}
这是在 EF 2.0 中使用数据初始化 DB 的首选方法,并且仍然适用于其他目的。
这个 ( Main
) 方法在dotnet run
被执行时dotnet run
,在它收到任何请求之前。
但是,如果您在 IIS 后面托管 webapp,请注意 IIS 在收到第一个请求之前不会实际启动您的应用程序! 所以,你不能在你的应用程序“内部”解决这个问题,我不知道新的/最新的 IIS 是否有任何关于这个的设置。
相反,您可以使用任何正常运行时间监控服务并将其设置为每 1-3-5 分钟检查一次您的网络应用程序,因此您的网络应用程序将收到一些“虚假”请求并在实际“业务”请求到达之前启动。
PS 如果您需要 async/await - 将void Main
更改为async Task Main
并将host.Run()
更改为await host.RunAsync()
(在此处讨论)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.