Нужна помощь по запуску/пробуждению API после перезапуска ApplicartionPool или IIS

У меня есть WebAPI, написанный на C# и размещенный в Windows Server Datacenter 2019. API должен быть всегда запущен и готов, и его нельзя удалять!

Если я остановил ApplicationPool и запустил его снова, API не инициализируется, пока я не отправлю запрос или не открою URL-адрес API, после чего он продолжит работать.

Проблема в том, что у меня есть ScopedService, и он должен выполнять некоторую работу в фоновом режиме, а перезапустив AppPool или IIS, он останавливает задания до тех пор, пока не придет запрос.

Я перепробовал много идей, но они не сработали.

Я установил AppPool на AlwaysRunning и тайм-аут простоя равный 0, но это тоже не помогло!

Я также попытался написать GetMethod для пробуждения API и в web.config я добавил =>

<applicationInitialization doAppInitAfterRestart = "true" skipManagedModules = "true">
        <add initializationPage = "api/app_start" />
      </applicationInitialization>`

Но тоже не сработало!

Приложение полностью удалено и просыпается только при вызове метода или URL-адреса.

Единственный метод, который был реализован, - это автоматический вызов API с помощью Shell-Script после перезапуска IIS с помощью Windows Taskplaner, но это всего лишь обходной путь, и он мне не понравился.

Есть ли у кого-нибудь идеи, как это сделать чистым? и автоматически инициализировать/пробуждать приложение, если IIS перезапускается или AppPool перезапускается?

Включена ли предварительная загрузка в расширенных настройках вашего сайта?

J.Memisevic 29.02.2024 15:24

@J.Memisevic проклятие!

Emperor Eto 29.02.2024 15:28

Да, предварительная загрузка включена - @J.Memisevic

M.Fakhoury 29.02.2024 15:31

какую версию .net вы используете?

J.Memisevic 29.02.2024 15:41

@J.Memisevic Я использую .Net 8

M.Fakhoury 29.02.2024 16:04
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
96
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В документации по установке, которую мы предоставляем пользователям, размещающим наше приложение ASP.NET Core 6, указаны все предварительные условия и шаги, необходимые для запуска приложения сразу после запуска или сброса пула приложений. Я перефразирую их здесь:

Предварительные условия виртуальной машины

Установленные роли и службы (из диспетчера серверов):

  • Информационные службы Интернета — службы Всемирной паутины
    • Особенности разработки приложений
      • АСП.НЕТ 4.8
      • Инициализация приложения

Конфигурация IIS

Пулы приложений

  • Режим запуска: AlwaysRunning
  • Тайм-аут простоя (минут): 0
  • Максимальное количество рабочих процессов: 1
  • Переработка > Определенное время: рекомендуется ежедневно в 04:00 (4 утра).

Это можно сделать как аргументы командной строки для %systemroot%\system32\inetsrv\appcmd.exe:

set apppool "AppPoolName" /autostart:true /startMode:"AlwaysRunning" /processModel.idleTimeout:"00:00:00" 
set apppool "AppPoolName" /-recycling.periodicRestart.schedule
set apppool "AppPoolName" /+recycling.periodicRestart.schedule.[value='04:00:00']

Приложения

При добавлении сайта убедитесь, что установлен флажок «Запустить сайт немедленно»:

Или из командной строки:

set site "ApplicationName" /applicationDefaults.preloadEnabled:true

Никаких дополнительных действий в web.config или где-либо еще не требуется.

Он уже включен, но тоже не сработал!

M.Fakhoury 29.02.2024 15:31

@M.Fakhoury Единственное, что я могу себе представить, это то, что на сервере должна быть установлена ​​функция инициализации приложений. Недостаточно просто иметь это в web.config.

Emperor Eto 29.02.2024 15:35

Все установлено и я попробовал поставить и это => <applicationInitialization doAppInitAfterRestart = "true"skipManagedModules = "true" remapManagedRequestsTo = "swagger/index.html" > <add InitializationPage = "swagger/index.html" /> </applicationInitialization > но это не сработало, и API не хочет работать, он показывает мне ошибку => Ошибка: превышено maxRedirects. Вероятно, застрял в цикле перенаправления. Если я использую инициализацию приложения - @Emperor Это

M.Fakhoury 29.02.2024 16:04

@M.Fakhoury Я обновил свой ответ с учетом всех известных мне предварительных условий. Если это не работает для вас, происходит что-то другое.

Emperor Eto 29.02.2024 16:16

Большое спасибо. Я сделал эти шаги, и теперь все работает нормально :)

M.Fakhoury 01.03.2024 08:01

Другие вопросы по теме

В процессе загрузки нескольких файлов из большого двоичного объекта на SFTP-сервер возникают сбои, и завершение загрузки занимает больше времени
Доступ к элементам html в веб-формах ASP.NET C#/из Site.Master
Microsoft.AspNetCore.Identity.UserManager может генерировать двухфакторный токен, но SignInManager не может оценить успешную аутентификацию через Angular
Почему служба с ограниченной областью действия может быть решена из синглтона в контейнере докеров?
QuestPDF не сохраняет PDF и не открывается на новой вкладке
Медленный запрос EF Core с включением
«dotnet --version» возвращает «Для запуска этого приложения необходимо установить или обновить .NET»
Какова предписанная методология интеграции платформы Wolverine в HostedService?
Тип носителя по умолчанию на контроллере ASP.NET
Как заставить функцию jQuery работать для одного и того же элемента во всех строках цикла foreach, а не только в первой строке?

Похожие вопросы