Инициализация приложения IIS с IIS 10.0 и WebAPI

Привет и доброе утро всем,

Я столкнулся с проблемой, когда службы, которые когда-то запускались, больше не подписывались на обнаружение службы. При тестировании они работали под управлением IIS Express. Однако, как только я перевернул его в IIS и убедился, что все еще работает; служба больше не обращается к Application_Start () в Global.asax.cs.

Проведя небольшое исследование, выясняется, что IIS требуется небольшая настройка, чтобы выполнить некоторые действия по инициализации после запуска пула приложений. Я запускаю это в среде Windows 10 Professional с IIS 10.0.17763.1

Цель: запустить службу, чтобы подписаться на обнаружение службы, если она работала под управлением IIS Express.

Сначала я нашел в MSDN документацию по настройке всего этого, включая предварительные условия здесь. Инициализация приложения IIS 8.0

После прохождения всех этапов и обновления необходимых записей конфигурации появляется сообщение, что я по-прежнему не инициализирую свой веб-сервис при запуске пула приложений.

Я создал новую конечную точку на контроллере для целей тестирования, чтобы заставить это работать.

AccountController:

[System.Web.Http.HttpGet]
public IHttpActionResult Init()
{
    // here is where I am registering the service thats coming up
}

Файл определения маршрута:

{"Name": "Account - Init",
"RouteTemplate": "api/{controller}/init",
"Defaults": "controller = AccountController, action = Init"}

Web.config

<applicationInitialization skipManagedModules="false" doAppInitAfterRestart="true" remapManagedRequestsTo="/api/account/init">
  <add initializationPage="/api/account/init" />
</applicationInitialization>

Я предполагаю, что инициализация произойдет только ОДИН РАЗ, и это происходит при первом запуске или повторном использовании пула приложений. Внутренние службы IIS будут выполнять «управляемый» вызов веб-приложения для сопоставленного ресурса, который он находит в файле приложения web.config. Мое понимание того, как оно должно работать неправильно? Если да, то может кто-нибудь объяснить, почему?

Я не просто пытаюсь «заставить это работать». Я хотел бы понять, почему это «не» в настоящее время работает на меня.

Спасибо всем заранее, кто нашел время, чтобы ответить здесь.

Всего 2 ответа


это верно, ваш web.config будет прочитан только один раз при запуске приложения. Вы можете добавить несколько сообщений, чтобы увидеть, как это происходит.

На самом деле вы можете получить очки отладчика, если вам удастся вовремя подключить Visual Studio к пулу приложений процесса IIS. Существует возможность подключить отладчик к процессу, так что вы можете использовать это.

Это до боли очевидно в системах, где AppSettings находятся в отдельном файле, а не в web.config. если вы внесете изменение, ничего не произойдет, пока вы не коснетесь web.config, который вызывает перезапуск приложения.


Следуя,

Я исправил свою проблему. Похоже, что код работает правильно, что он попадает в Global.asax.cs Application_Start, как и должно быть. Я получил исключение, не связанное с IIS, после внесенного мною изменения, которое привело к тому, что казалось "не работает".

Следование инструкциям на MSDN работает.


Есть идеи?

10000