Ошибка 0x8007000d при запуске приложения ASP.NET Core в IIS, несмотря на то, что AspNetCoreModule установлен - PullRequest
0 голосов
/ 04 марта 2019

У меня есть приложение 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 содержит эту информацию:

Screenshot of 500.19 error

Ошибка 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), но я определенно установил, что:

screenshot of add remove programs with hosting component installed

Я также могу увидеть его на главной странице "Модули"IIS и проверил, что файл, на который он указывает, действительно существует:

Screenshot of modules list in IIS

Странно, если я попытаюсь перейти на страницу "Модули" для этого конкретного сайта,Я получаю то же сообщение об ошибке, что и веб-страница:

Произошла ошибка при выполнении этой операции.

Подробности:

Имя файла: \? \ C:\ Code \ Sandbox \ IisTestApp \ IisTestApp \ web.config
Ошибка:

Screenshot of site modules error

Версия этого хост-модуля (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 использует его под прикрытием.Это не помогло в моей ситуации.

1 Ответ

0 голосов
/ 04 марта 2019

Исключив все специфичные для приложения, которые я (и многие полезные комментаторы, особенно Daboul ) могли придумать, и просмотрев видимые настройки IIS, я прибегнул к поиску основного файла конфигурации дляIIS в целом: applicationHost.config

Per Введение в ApplicationHost.config , этот файл находится в %windir%\system32\inetsrv\config.Поскольку настоящее приложение работает на другом компьютере в моем офисе, я сравнил их с помощью программы сравнения и обнаружил, что в моем конфигурационном файле отсутствует следующий узел:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <configSections>
        <!-- ...lots of other stuff... -->
        <sectionGroup name="system.webServer">
            <!-- ...lots of other stuff... -->

            <!--This "section" node for aspNetCore is the one that was missing-->
            <section name="aspNetCore" overrideModeDefault="Allow" />

Добавление того, что один узел разрешилошибка.

Как ни странно, сам AspNetCoreModule упоминается несколько раз позже в файле.Поскольку я раньше не редактировал этот файл вручную, возможно, это была какая-то ошибка установки при первой установке AspNetCoreModule.

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