WebApi Application_Start не будет запускаться до тех пор, пока не будет загружена веб-страница или не будет сделан запрос SignalR. - PullRequest
0 голосов
/ 15 мая 2018

У меня есть WebApi OWIN, размещенный на веб-сервере / клиентском приложении Winforms.

Дополнительно я использую SignalR для связи клиент / сервер.

При работе в IIS Express при отладке метода Application_Start в Global.asax.cs выполняется просто отлично.

На IIS 7.5 тот же код в Global.asax.cs не будет выполняться при запуске веб-сайта в IIS Manager

Application_Start срабатывает только при вызове его изpage http://localhost:7000/SignalR/hubs или Клиент отправляет запрос SignalR первый раз и после того, как код этого сервера работает правильно.

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

1 Ответ

0 голосов
/ 15 мая 2018

При работе в IIS Express при отладке Application_Start метод в Global.asax.cs выполняется просто отлично.

Это потому, что запуск вашего приложения с VS автоматически откроет просмотр, который выполнит первый запрос. Таким образом, сервер получает свой первый запрос косвенно через ваши действия через VS.

Application_Start срабатывает только когда я вызываю его со страницы http://localhost:7000/SignalR/hubs или Клиент отправляет запрос SignalR в первый раз и после этого серверный код работает правильно.

Это конфигурация по умолчанию. Application_Start Событие запускается при получении первого запроса. Но вы можете изменить это через конфигурацию в web.config . Поэтому вы должны использовать элемент <applicationInitialization>, как объяснено Microsoft :

Элемент <applicationInitialization> указывает, что веб-приложение инициализация выполняется в упреждающем режиме до получения запроса. Приложение может запускаться быстрее, если последовательность инициализации такие как инициализация соединений, заполнение кешей в памяти, запуск запросы и компиляция кода страницы выполняются до HTTP-запроса

Кстати, чтобы сделать это без разогрева сервера, вам нужно перейти на более высокую версию IIS. Минимальная требуемая версия - IIS 8. Ссылка на документацию, добавленная выше, объясняет, как активировать эту функцию.

Если вы считаете, что процесс инициализации может занимать много времени (инициализация кэша и т. Д.), Этот элемент конфигурации также позволяет настроить статическую страницу или заставку, которые будут отображаться для использования до завершения инициализации. Для этого вы используете remapManagedRequestsTo атрибут <applicationInitialization>.

Итак, ваша конфигурация должна выглядеть следующим образом в вашем файле web.config:

<system.webServer>
   <applicationInitialization
      doAppInitAfterRestart="true"
      skipManagedModules="true"
      remapManagedRequestsTo="path_to_your_static_file_to _show">
   </applicationInitialization>
</system.webServer>

Для получения дополнительной информации не забудьте нажать на ссылку с документацией, которую я добавил ранее.

...