У меня есть приложение ASP.NET Core, которое отлично работает в IIS Express.Аналогично, если я запускаю приложение из командной строки через dotnet run
, все работает гладко:
C:\Code\Sandbox\IisTestApp\IisTestApp>dotnet run
Using launch settings from C:\Code\Sandbox\IisTestApp\IisTestApp\Properties\launchSettings.json...
Hosting environment: Production
Content root path: C:\Code\Sandbox\IisTestApp\IisTestApp
Now listening on: http://localhost:5000
Now listening on: https://localhost:5001
Application started. Press Ctrl+C to shut down.
Если я пытаюсь настроить таргетинг на локальный IIS, я получаю следующую ошибку:
Невозможно запустить процесс C: \ Program Files \ dotnet \ dotnet.exe.Запрос веб-сервера не выполнен с кодом состояния 500, Внутренняя ошибка сервера.Полный ответ был записан в C: \ Users {мое имя пользователя} \ AppData \ Local \ Temp \ HttpFailure_08-05-50.html.
Файл HTML содержит эту информацию:
Ошибка HTTP 500.19 - Внутренняя ошибка сервера
Запрошенная страница не может быть доступна, поскольку соответствующие данные конфигурации длястраница недействительна.
Подробная информация об ошибке:
Модуль IIS Web Core
Уведомление BeginRequest
Обработчик Еще не определено
Код ошибки 0x8007000d
Ошибка конфигурации
Файл конфигурации \? \C: \ Code \ Sandbox \ IisTestApp \ IisTestApp \ web.config
Запрошенный URL http://localhost:80/IisTestApp
Физический путь C: \ Code \ Sandbox \ IisTestApp \ IisTestApp
Метод входа в систему Еще не определено
Пользователь входа в систему Еще не определено
Примечание: если это не очевидно из этого беспорядкавозраст, это минимальное повторение моей проблемы, а не само приложение
Большинство того, что я вижу в Интернете, говорит, что код ошибки 0x8007000d
указывает на то, что у меня нет .NET Core WindowsКомпонент хостинга сервера (AspNetCoreModule
), но я определенно установил, что:
Я также могу увидеть его на главной странице "Модули"IIS и проверил, что файл, на который он указывает, действительно существует:
Странно, если я попытаюсь перейти на страницу "Модули" для этого конкретного сайта,Я получаю то же сообщение об ошибке, что и веб-страница:
Произошла ошибка при выполнении этой операции.
Подробности:
Имя файла: \? \ C:\ Code \ Sandbox \ IisTestApp \ IisTestApp \ web.config
Ошибка:
Версия этого хост-модуля (2.1.8)в целом соответствует тому, что я установил:
C:\Users\{my user name}>dotnet --list-sdks
2.1.202 [C:\Program Files\dotnet\sdk]
2.1.504 [C:\Program Files\dotnet\sdk]
C:\Users\{my user name}>dotnet --list-runtimes
Microsoft.AspNetCore.All 2.1.4 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.8 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.App 2.1.4 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.8 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.NETCore.App 2.0.9 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.8 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
И на что ориентируется мое тестовое приложение:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.1.2" PrivateAssets="All" />
</ItemGroup>
</Project>
Несмотря на все это, я думаю, что проблема действительносвязан с IIS и этим компонентом хостинга!Вот (очень по умолчанию) web.config, сгенерированный с шаблоном проекта:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="bin\IISSupport\VSIISExeLauncher.exe" arguments="-argFile IISExeLauncherArgs.txt" stdoutLogEnabled="false">
<environmentVariables />
</aspNetCore>
</system.webServer>
</location>
</configuration>
Примечание: я все равно получаю то же сообщение об ошибке, если я жестко кодирую полный путь в processPath, илииспользуйте .\
относительный путь
Если я удаляю узел <aspNetCore>
, я получаю другую ошибку:
Ошибка HTTP 502.3 - Bad Gateway
Произошла ошибка соединения при попытке перенаправить запрос.
Подробная информация об ошибке:
Модуль AspNetCoreModule
Уведомление ExecuteRequestHandler
Обработчик aspNetCore
Код ошибки 0x80070490
Запрошенный URL http://localhost:80/IisTestApp
Физический путь C: \ Code \ Sandbox \ IisTestApp \ IisTestApp
Метод входа Аноним
Пользователь входа Аноним
Дело в том, что AspNetCoreModule
на этот раз выдает ошибку, поэтому загружается и выполняет некоторый код.
Публикация в отдельной папке и ручная настройка сайта в IIS (вместо того, чтобы полагаться на поведение по умолчанию Visual Studio при создании веб-сайта IIS, указывающего на папку «bin»), приводит к тому же сообщению об ошибке, хотя я получаюнемного отличающийся aspNetCore
узел в сгенерированном файле web.config:
<aspNetCore processPath="dotnet" arguments=".\IisTestApp.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout">
<environmentVariables />
</aspNetCore>
Что приводит к сбою IIS для запуска этого приложения?
Я попытался переустановить .NET Core (SDK, среда выполнения и компонент размещения), но это не помогло.
Я также заметил, что несколько сообщений, в которых упоминается установка модуля перезаписи URL для IIS, исправляют эту ошибку (особенно это: Ошибка HTTP 500.19 - Ошибка IIS 7.5 0x8007000d ).Мой web.config не упоминает этот модуль, но я попытался установить его, если AspNetCoreModule использует его под прикрытием.Это не помогло в моей ситуации.