ASP.NET Core + Framework в IIS получает HTTP 404 - PullRequest
0 голосов
/ 01 мая 2019

Хорошо - это мое первое развертывание приложения ASP.NET Core. Следует помнить, что я использую ASP.NET Core 2.2 и ориентируюсь на Framework версии 4.6.2 (не на .Net Core). Все это прекрасно работает на моей локальной машине с VS2017 и IISExpress.

Я прошел процедуру, описанную MS здесь: Хост ASP.NET Core на Windows с IIS Документация длинная и сложная, но я думаю, что я рассмотрел все. Это проясняет одно: Модель внутрипроцессного хостинга не поддерживается для приложений ASP.NET Core, предназначенных для .NET Framework. Итак, я знаю, что мне нужно использовать Out-of-Proc. Некоторые другие пункты:

  • Я опубликовал приложение в локальной папке и скопировал его на сервер без каких-либо изменений.
  • Я создал новое приложение на веб-сайте по умолчанию и предоставил ему свой собственный пул приложений - «Нет управляемого кода»
  • По умолчанию используется out-of-proc, поэтому я не делал никаких специальных настроек для этого.
  • Я подтвердил, что AspNetCoreModuleV2 появляется в списке модулей.

Результат

На каждой странице, которую я нажимаю, я получаю HTTP404. Я использую IE локально на сервере и использую URL-адрес, например: http://localhost/MyApp/Home/MyView

  • Пул приложений показывает, что запущено 1 приложение.
  • В журнале событий приложения отображается сообщение: Приложение '/ LM / W3SVC / 2 / ROOT / MyApp' успешно запустило процесс '8864', а процесс '8864' прослушивает порт '37706'. Не показывает ошибок.
  • Я попытался добавить файл default.htm в корень приложения и напрямую загрузить статическую страницу (используя http://localhost/MyApp/default.htm).. Это дает 404. Если я удалю web.config, эта страница загрузится.

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

Может ли кто-нибудь предоставить какие-либо рекомендации по устранению или устранению этой проблемы?

Обновление 1 : Web.config ниже. Я пытался с и без hostModel = ... aspNetCore журналы показывают успешный запуск. Ничего не добавляется в журнал при каждой попытке доступа к странице (кажется странным)

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <!--
    Configure your application settings in appsettings.json. Learn more at http://go.microsoft.com/fwlink/?LinkId=786380
  -->
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      <remove name="BlockViewHandler" />
      <add name="JavaScript" path="*.js" verb="GET,HEAD" type="System.Web.StaticFileHandler" />
      <add name="CSS" path="*.css" verb="GET,HEAD" type="System.Web.StaticFileHandler" />
      <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
    </handlers>
    <aspNetCore processPath=".\My.App.Name.exe" arguments="" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="OutOfProcess">
      <environmentVariables />
      <handlerSettings>
        <handlerSetting name="debugLevel" value="file" />
        <handlerSetting name="debugFile" value="d:\Log\MyApp.log" />
      </handlerSettings>
    </aspNetCore> 
  </system.webServer>
</configuration>
<!--ProjectGuid: ee76911e-decb-48b7-bd74-36ebfbdb22b6-->

1 Ответ

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

Решено! Я использовал переменную среды ASPNETCORE_ENVIRONMENT, но не знал, что процесс публикации не помещает это в web.config. Я добавил это в Web.config:

<environmentVariables>
    <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>

и страницы теперь загружаются.

Самая полезная диагностика, которую я обнаружил, была по этой ссылке Устранение неполадок ядра ASP.NET на IIS Там они рекомендовали мне запустить My.App.Name.exe из командной строки. Это создает веб-процесс и назначает его порту, а также выводит все данные консоли. Это позволило мне понять, что это на самом деле наполовину работает, и это привело меня к тому, что я пропустил переменную Env.

Еще раз спасибо за предложения ...

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