Предотвращение остановки / выгрузки / удаления Asp Net приложения Core 3 - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть веб-приложение, разработанное с использованием. net core 3. Я развернул его на хостинге под управлением IIS. Одним из наиболее важных модулей моего приложения являются запланированные задачи, которые должны выполняться в течение всего срока службы приложения. Проблема, с которой я столкнулся, заключается в том, что приложение останавливается после 1 или 2 часов бездействия.

Я развертываю приложение с использованием «вне процесса». Чтобы достичь цели, я инициализировал приложение с этим кодом на Program.cs:

Host.CreateDefaultBuilder(args)               
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseIISIntegration();
                    webBuilder.UseEnvironment(EnvironmentName);
                    webBuilder.UseStartup<Startup>();
                });   

Также я установил эти настройки на .scproj

 <PropertyGroup>
    <AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
  </PropertyGroup>

Затем я проверяю свои заголовки. Я вижу эту запись в заголовках моих ответов:

Server: Kestrel

Мои расписания реализованы IHostedService и должны выполняться как фоновые задачи.

Все вышеперечисленное дает мне мнение о том, что приложение должно работать без остановок и не должно утилизироваться IIS, поскольку оно работает на Kestrel и использует IIS только в качестве прокси-сервера. Но на самом деле все иначе. Используя журналы, я вижу, как через час или два мое приложение перестает работать и больше не регистрируется.

Кроме того, у меня нет доступа к IIS, потому что это не по моему разрешению, поэтому я могу не меняйте настройки. У кого-нибудь есть идеи, как заставить мое приложение работать без остановок?

1 Ответ

0 голосов
/ 08 апреля 2020

Лучше всего изменить настройки iis.

Запустить этот скрипт powershell, чтобы сохранить приложение в iis. и если ваш сервер был перезапущен, этот скрипт автоматически запускает ваше приложение

  • $AppPool - это имя вашего приложения, а Application Pools
  • $Site - это имя вашего приложения. в Sites
## IIS WebAdmin Module
Import-Module WebAdministration

$AppPoolInstance = Get-Item IIS:\AppPools\$AppPool

Write-Output "Set Site PreLoadEnabled to true"
Set-ItemProperty IIS:\Sites\$Site -name applicationDefaults.preloadEnabled -value True

Write-Output "Set Recycling.periodicRestart.time  = 0"
$AppPoolInstance.Recycling.periodicRestart.time = [TimeSpan]::Parse("0");
$AppPoolInstance | Set-Item

Write-Output "Set App Pool start up mode to AlwaysRunning"
$AppPoolInstance.startMode = "alwaysrunning"

Write-Output "Disable App Pool Idle Timeout"
$AppPoolInstance.processModel.idleTimeout = [TimeSpan]::FromMinutes(0)
$AppPoolInstance | Set-Item

if ($appPoolStatus -ne "Started") {
    Write-Output "Starting App Pool"
    Start-WebAppPool $AppPool
} else {
    Write-Output "Restarting App Pool"
    Restart-WebAppPool $AppPool
}

Эта ссылка может быть полезна для вас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...