web-dev-qa-db-fra.com

IIS 7, HttpHandler et l'erreur HTTP 500.21

Sur IIS 7, j'essaie d'utiliser HttpHandler personnalisé pour mon application Web ASP.NET. J'utilise le mode de pipeline "classique", la version .NET est 4.0.30319, ma configuration web.config pour le gestionnaire est la suivante: 

<system.webServer>
<handlers>
    <add name="MyHandler" path="*.myExtension" verb="*" type="Company.App.UI.Controls.MyHandler, Company.App.UI" resourceType="Unspecified" />
</handlers>
</system.webServer> 

Lorsque j'appelle ce gestionnaire, j'obtiens cette erreur:

HTTP Error 500.21 - Internal Server Error
Handler "MyHandler" has a bad module "ManagedPipelineHandler" in its module list

J'ai fait une recherche google, la plupart des gens résolvent ce problème en ré-enregistrant ASP.NET par la commande aspnet_regiis.exe/i, mais ceci est pas fonctionne pour moi même erreur). Je l'ai essayé sur deux serveurs différents, mais j'ai obtenu le même résultat. 

Quoi d'autre devrais-je essayer? Je vous remercie

15
Mikee

Il n'est pas possible de configurer un gestionnaire géré IIS pour qu'il s'exécute en mode classique. Vous devriez exécuter IIS en mode intégré si vous voulez le faire.

Vous pouvez en savoir plus sur les modules, les gestionnaires et les modes IIS dans l'article suivant du blog:

IIS 7.0, ASP.NET, pipelines, modules, gestionnaires et conditions préalables

Pour les gestionnaires, si vous définissez preCondition = "integratedMode" dans le fichier mappage, le gestionnaire ne fonctionnera qu'en mode intégré. Sur D'autre part, si vous définissez preCondition = "classicMode", le gestionnaire utilisera ne fonctionne qu'en mode classique. Et si vous omettez ces deux éléments, le gestionnaire peut fonctionner dans les deux modes, bien que cela ne soit pas possible pour un .__ géré. gestionnaire.

17
João Angelo

Heureusement, c’est très facile à résoudre. Exécutez la commande suivante à partir d'une invite de commande avec privilèges:

%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i

Si vous utilisez un ordinateur 32 bits, vous devrez peut-être utiliser les éléments suivants:

%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
11
meganhost.com

J'ai eu le même problème et a été résolu en exécutant ce qui suit en cours d'exécution

% windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i

9
paul Gathuo Wagana

J'ai eu le même problème et je l'ai juste résolu. J'avais posté ma propre question sur stackoverflow:

Impossible de passer à mon IHttpHandler, GET fonctionne bien

La solution consistait à définir runManagedModulesForWebDavRequests sur true dans l'élément modules. Je suppose qu’une fois que vous avez installé WebDAV, toutes les demandes PUT y sont associées. Si vous souhaitez que PUT accède à votre gestionnaire, vous devez supprimer le module WebDAV et définir cet attribut sur true.

<modules runManagedModulesForWebDavRequests="true">
...
</modules>

Donc, si vous rencontrez ce problème lorsque vous utilisez le verbe PUT et que vous avez installé WebDAV, nous espérons que cette solution résoudra votre problème.

2
nickdu

Sur Windows Server 2016, j'ai utilisé:

dism /online /enable-feature /featurename:IIS-ASPNET45 /all

Peut également être fait via Powershell:

Install-WindowsFeature .NET-Framework-45-Features

1
Garfius

Cette situation se produit parce que vous n'avez pas installé/démarré le service de ASP.net.

Utilisez la commande ci-dessous dans Windows 7,8,10.

%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
0
Dhiral Kaniya