2012-08-22 23 views
13

En IIS 7, estoy intentando usar HttpHandler personalizado para mi aplicación web ASP.NET. Utilizo modo de canalización "clásico", la versión de .NET es 4.0.30319, la configuración de mi web.config para el controlador es:IIS 7, HttpHandler y HTTP Error 500.21

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

Cuando invoco este controlador, me sale este error:

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

Hice una búsqueda en Google, la mayoría de las personas solucionó este problema volviendo a registrar ASP.NET por el comando aspnet_regiis.exe/i, pero esto es no trabajando para mí (el comando termina, reinicio IIS, pero igual error). Lo probé en dos servidores diferentes, pero obtuve el mismo resultado.

¿Qué más debo probar? Gracias

Respuesta

14

No se puede configurar un controlador administrado de IIS para que se ejecute en modo clásico. Debería ejecutar IIS en modo integrado si desea hacerlo.

Usted puede aprender más acerca de módulos, controladores y IIS modos en el siguiente blog:

IIS 7.0, ASP.NET, pipelines, modules, handlers, and preconditions

For handlers, if you set preCondition="integratedMode" in the mapping, the handler will only run in integrated mode. On the other hand, if you set preCondition="classicMode" the handler will only run in classic mode. And if you omit both of these, the handler can run in both modes, although this is not possible for a managed handler.

+23

que tiene el mismo problema. Mi servidor usa Windows Server 2008 R2, IIS 7.0. Vengo a esta carpeta c: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ y ejecuto este comando aspnet_regiis -i, entonces el problema fue resuelto. – nvtthang

+0

Gracias nvtthang! – alsantos123

+0

Yo también hice aspnet_regiis y funcionó :) Gracias @nvtthang –

-1

Una solución que he encontrado es que usted debe tener que cambiar el .Net El marco vuelve a la v2.0 al hacer clic con el botón derecho en el sitio que tiene administrador en Grupos de aplicaciones desde Configuración avanzada.

1

Tuve el mismo problema y lo solucioné. Yo había publicado mi propia pregunta en StackOverflow:

Can't PUT to my IHttpHandler, GET works fine

La solución fue establecer runManagedModulesForWebDavRequests en true en el elemento de módulos. Supongo que una vez que instales WebDAV, todas las solicitudes PUT estarán asociadas a él. Si necesita el PUT para ir a su controlador, debe eliminar el módulo WebDAV y establecer este atributo en verdadero.

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

Así que si usted está funcionando en el problema cuando se utiliza el verbo PUT y ha instalado WebDAV entonces espero que esta solución va a arreglar su problema.

+0

¡Me salvaste el día! – Maxime

7

Afortunadamente, es muy fácil de resolver. Ejecute el comando de seguimiento del sistema con privilegios elevados:

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

Si estás en una máquina de 32 bits, puede que tenga que utilizar el siguiente:

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

Esto SOLO funcionó para mí si eliminé el .exe No sé por qué. – shubniggurath

+0

Funcionó para mí también en un cuadro de Win 7 Pro. Tuve que ejecutar el símbolo del sistema como administrador. –

7

que tenían el mismo problema y era resuelto ejecutando lo siguiente en ejecutar

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

+1

esto funcionó para mí también. :) –

-1

en el servidor Windows 2016 he utilizado:

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

también se puede hacer a través de Powershell:

Install-WindowsFeature .NET-Framework-45-Features