Используйте 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 и все еще отлично работает для других целей.
Этот (Main
) метод выполняется, когда выполняется dotnet run
, прежде чем он получит какие-либо запросы.
Но если вы размещаете веб-приложение за IIS , имейте в виду, что IIS фактически не запустит ваше приложение, пока не получит первый запрос! Таким образом, вы не можете решить эту проблему «внутри» своего приложения, и я не знаю, есть ли в новых / последних версиях IIS какие-либо настройки по этому поводу.
Вместо этого вы можете использовать любую службу мониторинга работоспособности и установить ее. проверять ваше веб-приложение каждые 1-3-5 минут, чтобы ваше веб-приложение получало некоторый «поддельный» запрос и раскручивалось до того, как поступит фактический «деловой» запрос.
PS Если вам нужна асинхронность / ожидание - измените void Main
на async Task Main
и host.Run()
на await host.RunAsync()
(обсуждается здесь ).