Инициализация приложения IIS с IIS 10.0 и WebAPI - PullRequest
0 голосов
/ 17 мая 2019

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

Я столкнулся с проблемой, когда службы, которые когда-то запускались, больше не подписывались на обнаружение службы. При тестировании они работали под управлением 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 ]

0 голосов
/ 17 мая 2019

После,

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

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

0 голосов
/ 17 мая 2019

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

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

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

...