J'ai une application ASP.NET Core qui fonctionne très bien dans IIS Express. De même, si je lance l'application depuis la ligne de commande via dotnet run
, tout fonctionne bien:
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.
Si j'essaie de cibler IIS local, j'obtiens l'erreur suivante:
Impossible de démarrer le processus C:\Program Files\dotnet\dotnet.exe. La demande du serveur Web a échoué avec le code d'état 500, Erreur de serveur interne. La réponse complète a été écrite dans C:\Users {mon nom d'utilisateur}\AppData\Local\Temp\HttpFailure_08-05-50.html.
Le fichier HTML contient ces informations:
Erreur HTTP 500.19 - Erreur de serveur interne
La page demandée n'est pas accessible car les données de configuration associées à la page ne sont pas valides.
Informations détaillées sur l'erreur:
Module IIS Web Core
Notification BeginRequest
Gestionnaire Pas encore déterminé
Code d'erreur 0x8007000d
Erreur de configuration
Fichier de configuration \?\C:\Code\Sandbox\IisTestApp\IisTestApp\web.config
URL demandée http: // localhost: 80/IisTestApp
Chemin physique C:\Code\Sandbox\IisTestApp\IisTestApp
Méthode de connexion Pas encore déterminé
Utilisateur de connexion Pas encore déterminé
Remarque: au cas où ce message ne serait pas évident, il s'agit d'une réprobation minimale de mon problème, pas de l'application réelle
La plupart de ce que je vois en ligne indique que le code d'erreur 0x8007000d
indique que je n'ai pas le composant d'hébergement de serveur Windows .NET Core (AspNetCoreModule
), mais je l'ai définitivement installé:
Je peux également le voir dans la page principale "Modules" d'IIS, et vérifié que le fichier vers lequel il pointe existe réellement:
Étrangement, si j'essaie d'accéder à la page Modules de ce site spécifique, j'obtiens le même message d'erreur que la page Web:
Une erreur s'est produite lors de l'exécution de cette opération.
Détails:
Nom de fichier: \?\C:\Code\Sandbox\IisTestApp\IisTestApp\web.config
Erreur:
Cette version du module d'hébergement (2.1.8) correspond généralement à ce que j'ai installé:
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]
Et ce que mon application de test cible:
<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>
Malgré tout cela, je pense que le problème est vraiment lié à IIS et à ce composant d'hébergement! Voici le web.config (très par défaut) qui est généré avec le modèle de projet:
<?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>
Remarque: J'obtiens toujours le même message d'erreur si je code en dur le chemin complet dans le processPath, ou utilise .\
chemin relatif
Si je supprime le <aspNetCore>
node, j'obtiens une erreur différente:
Erreur HTTP 502.3 - Mauvaise passerelle
Une erreur de connexion s'est produite lors de la tentative d'acheminement de la demande.
Informations détaillées sur l'erreur:
Module AspNetCoreModule
Notification ExecuteRequestHandler
Gestionnaire aspNetCore
Code d'erreur 0x80070490
URL demandée http: // localhost: 80/IisTestApp
Chemin physique C:\Code\Sandbox\IisTestApp\IisTestApp
Méthode de connexion Anonyme
Utilisateur de connexion Anonyme
Le fait étant que AspNetCoreModule
renvoie cette fois l'erreur, donc il est en cours de chargement et en exécutant du code.
Publication dans un dossier distinct et configuration manuelle du site dans IIS (plutôt que de s'appuyer sur le comportement par défaut de Visual Studio pour créer un site Web IIS pointé sur le " bin ") entraîne le même message d'erreur, bien que j'obtienne un nœud aspNetCore
légèrement différent dans le fichier web.config généré:
<aspNetCore processPath="dotnet" arguments=".\IisTestApp.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout">
<environmentVariables />
</aspNetCore>
Qu'est-ce qui empêche IIS de ne pas exécuter cette application?
J'ai essayé de réinstaller .NET Core (SDK, runtime et composant d'hébergement) mais cela n'a pas aidé.
J'ai également remarqué plusieurs articles mentionnant l'installation du module de réécriture d'URL pour IIS corrige cette erreur (notamment ceci: Erreur HTTP 500.19 - IIS 7.5 Erreur 0x8007000d ). Mon web.config ne mentionne pas ce module, mais j'ai essayé de l'installer au cas où l'AspNetCoreModule l'utiliserait sous les couvertures. Cela n'a pas aidé dans ma situation.
Après avoir exclu tout ce qui est spécifique à l'application auquel je (et les nombreux commentateurs utiles, en particulier Daboul ) pouvais penser, et après avoir examiné les paramètres visibles IIS, j'ai eu recours à en regardant le fichier de configuration principal pour IIS dans son ensemble: applicationHost.config
Par Introduction à ApplicationHost.config , ce fichier se trouve dans %windir%\system32\inetsrv\config
. Étant donné que la véritable application fonctionne sur une autre machine dans mon bureau, je les ai comparés à l'aide d'un programme de comparaison et j'ai constaté que le nœud suivant manquait dans mon fichier de configuration:
<?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" />
L'ajout de ce nœud a résolu l'erreur.
Curieusement, l'AspNetCoreModule lui-même est référencé plusieurs fois plus tard dans le fichier. Étant donné que je n'ai pas modifié manuellement ce fichier auparavant, il semble possible que ce soit une sorte d'erreur d'installation lors de la première installation d'AspNetCoreModule.
J'ai essayé d'utiliser la suggestion ci-dessus, mais cela n'a pas fonctionné. J'ai donc réinstallé l'hébergement Asp Net Core Runtime en mode administrateur et mon ApplicationHost.Config a été corrigé.
L'installation du pack d'hébergement .NET Core a résolu le problème pour moi. ici est un lien vers le pack d'hébergement .NET Core.
Utilisation de .NET Core 3.1