Запуск сайта ASP.NET Core 3.1 в IIS [дубликат]
Мне не удалось запустить 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?
Ответы
Убедитесь, что вы сделали следующее:
- Установлен последний пакет хостинга 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
Похоже, вы пропустили установку пакета веб-хостинга 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