Запуск сайта ASP.NET Core 3.1 в IIS [дубликат]

Aug 17 2020

Мне не удалось запустить ASP.NET Core 3.1 в IIS (v10) так, как я ожидал. Я публикую на сайте в папки, как обычно, но когда я тестирую из своей виртуальной машины Windows Server 2019, перейдя на http: // localhost: 80 или https: // localhost: 443 (к обоим из которых привязан сайт IIS), Я просто получаю ответ 500.19. НО если из командной строки я ввожу dotnet MyWebApp.dll, то сайт ДЕЙСТВИТЕЛЬНО отображается по адресу https: // localhost: 5001 /.

В чем дело? Почему порт 80 не работает автоматически, если он привязан к нему в IIS?

Есть ли какой-нибудь трюк, чтобы заставить эту работу работать, просто скопировав файлы и используя IIS, или мне НЕОБХОДИМО использовать командную строку для запуска сайта .NET Core 3.1?

Ответы

1 RoarS. Aug 18 2020 at 09:57

Убедитесь, что вы сделали следующее:

  • Установлен последний пакет хостинга Core. Если нет, перейдите сюда и найдите «Hosting Bundle».https://dotnet.microsoft.com/download/dotnet-core/3.1 (вы должны заходить туда регулярно, новая версия примерно каждый месяц, последняя - 3.1.7, когда писал это)
  • В пуле приложений убедитесь, что платформа .NET не выбрана

При публикации используйте

Deployment Mode = Framework-Dependent
Target Runtime = win-x64

В вашем профиле публикации (вы найдете этот файл в папке проекта /Properties/PublishProfiles/YourProfileName.pubxml) после сохранения профиля вам понадобится

<EnvironmentName>Production</EnvironmentName>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>

InProcess - самый быстрый вариант при использовании IIS. При запуске публикации это попадет в ваш сгенерированный файл web.config следующим образом

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath=".\YourWebApp.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="InProcess">
      <environmentVariables>
        <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" />
      </environmentVariables>
    </aspNetCore>
  </system.webServer>
</configuration>

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

<EnvironmentName>Staging</EnvironmentName>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>

Когда вы получаете ответ с https: // localhost: 5001 /, вы используете Kestrel, а не IIS

JokiesDing Aug 18 2020 at 06:30

Похоже, вы пропустили установку пакета веб-хостинга Asp.net Core. Ядро Asp.net не поддерживается IIS по умолчанию, даже если вы можете запустить его в Visual Studio IIS express. Кроме того, IIS не будет регистрировать обработчик AspNetCore даже при установке пакета веб-хостинга asp.net core.

Поэтому убедитесь, что вы зарегистрировали обработчик и основной модуль asp.net в web.config

<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".\MyWebApp.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
    </system.webServer>
  </location>

Конечно, вы можете опубликовать свое приложение с помощью инструмента веб-развертывания VS. Он зарегистрирует эту конфигурацию при публикации проекта.

https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/?view=aspnetcore-3.1