2010-05-18 28 views
31

Tengo problemas para tratar de asignar un HttpHandler en el web.config.Mapeo de problemas HttpHandler -> HTTP Error 404 No encontrado

Este es el bit de configuración relevantes:

<httpHandlers> 
    <add verb="*" path="*.hndlr" type="MyAssembly.MyHandler, MyAssembly" validate="false" /> 
</httpHandlers> 

Cuando navego a http://localhost/myApp/whatever.hndlr estoy recibiendo un error de servidor 404 (no encontrado).

Es la primera vez que conecto un HttpHandler por lo que podría estar perdiendo algo, ¡cualquier ayuda apreciada!

ACTUALIZACIÓN:

me las arreglé para conseguir que funcione con las dos respuestas hasta el momento - que es capaz de exaplin por qué funciona obtiene la respuesta marcada!

Esta es mi configuración (no funcionará si no tienen tanto - Me postulo IIS7 en el modo clásico)

System.web:

<httpHandlers> 
    <add verb="*" path="*MyHandler.hndlr" type="MyAssembly.MyAssemblyHandler, MyAssembly" validate="false"/> 
</httpHandlers> 

system.webServer:

<handlers> 
    <add name="MyHandler" verb="*" path="*MyHandler.hndlr" type="MyAssembly.MyAssemblyHandler, MyAssembly" validate="false" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script"/> 
</handlers> 
+1

Además de su actualización, si está utilizando IIS6, cualquier cosa que ponga en la sección System.webserver se ignorará, ya que solo se usa en el modo Integrated Pipeline de IIS7. La única razón para tener ambos sería tener un único web.config que sea válido para IIS7 pipeline y el modo calssic e IIS6. –

+0

siento que es IIS7, pero ¿eso cambia las cosas? Si elimino el bit en la sección system.webserver, no funciona (no se encuentra 404) y estamos en modo clásico por razones de compatibilidad. – JohnIdol

+0

y si comento el que está en system.web me sale "Error al ejecutar la URL" - ¡funciona solo con ambos por alguna razón divertida! :) – JohnIdol

Respuesta

27

¿Está utilizando IIS7? De ser así, ¿se está ejecutando el grupo de aplicaciones en modo clásico o en modo interconexión? Si se trata de IIS7 en modo pipeline entonces la referencia de manejador necesita para entrar en la siguiente sección

<system.webServer> 
    <handlers> 
    </handlers> 
<system.webServer> 

en lugar de en la siguiente sección.

<system.web> 
    <httpHandlers> 
    </httpHandlers> 
</system.web> 
+0

intentado (tuvo que agregar name = "MyHandler" a los atributos) - parece prometedor pero ahora obtiene un error diferente -> HTTP Error 500.21 - Controlador interno de errores del servidor "MyHandler" tiene un módulo malo "ManagedPipelineHandler" en su lista de módulos – JohnIdol

+0

para responder a su otra pregunta, me estoy ejecutando en modo clásico (no enrutado), lo que explica por qué me aparece el error descrito en el comentario anterior :) – JohnIdol

+0

@JohnIdol - ¿Ha logrado que funcione su controlador http? –

4

¿Cuál es la extensión de su controlador? Si usa una extensión personalizada como .hndlr, es posible que también necesite agregar ScriptMap en IIS y apuntarlo al tiempo de ejecución de ASP.NET para que IIS pueda reenviar la solicitud al procesador correcto.


  1. En IIS7 ir a su sitio web
  2. En el grupo IIS ir a asignaciones de controlador
  3. Bajo acciones clic Agregar asignación de script
  4. Conjunto Solicitud de surco a *. hndlr
  5. Establecer la ruta de acceso al tiempo de ejecución de ASP.NET (% windir% \ Microsoft.NET \ Framework64 \ v2.0.5 0727 \ aspnet_isapi.dll) o la versión que esté ejecutando.

Luego en su web.config tendrá que registrar el controlador en la sección correspondiente como se describe en la otra respuesta.

9

Al igual que una guía para aquellos atascados con este problema, encontré el atributo crucial para ser ..

resourceType="Unspecified" 

I seguido originalmente un ejemplo de Microsoft para configurar esto y tenían como

resourceType="File" 

la que siguió dándome 404 errores. Mi HTTPHandler devuelve gráficos.

Espero que esto ayude :)

+0

¡Gracias, gracias, gracias! –

5

estoy usando IIS 7, la solución es:

en la sección

<system.web> 
    <httpHandlers> 
     <add verb="*" path="*.ashx" type="CVOS.MyDocumentHandler"/> 
    </httpHandlers> 
<system.web> 

y la sección

<system.webServer> 
    <handlers> 
     <add name="pdfHandler" verb="*" path="*.ashx" type="CVOS.MyDocumentHandler" /> 
    </handlers> 
</system.webServer> 
0

Espero que mi solución ayudará a los demás . En un servidor se movió de IIS6 a 7.5, ambos .NET 4.0 Integrated, tuve un control Captcha que dejó de funcionar. Resulta que eliminar el atributo preCondition="integratedMode,runtimeVersionv2.0" del nodo <add> en <system.webserver><handlers> resolvió el problema.

2

También es posible experimentar este error si ha configurado el controlador para 32 bits, pero está ejecutándose en 64 bits (o viceversa). Es fácil configurar ambos y tener todas las bases cubiertas.

Tenga en cuenta las diferencias entre "preCondition" y "scriptProcessor".

<handlers> 
    <add name="MyHandler_32bit" verb="*" path="*MyHandler.hndlr" preCondition="bitness32" type="MyAssembly.MyAssemblyHandler, MyAssembly" validate="false" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" /> 
    <add name="MyHandler_64bit" verb="*" path="*MyHandler.hndlr" preCondition="bitness64" type="MyAssembly.MyAssemblyHandler, MyAssembly" validate="false" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" /> 
</handlers> 
0

Ninguna de las respuestas anteriores funcionó para mí.
estoy usando IIS 8.5, .Net v4.0, Integrated, y todavía estaba un 404 con la siguiente configuración de controlador:

<system.webServer> 
    <handlers> 
     <add name="testEmail" path="*.em" verb="*" type="MyApp.testRazorEmailHandler, MyApp" resourceType="Unspecified" requireAccess="Script" /> 
    </handlers> 
</system.webServer> 


He activado el rastreo y se encontró lo siguiente:

116. -HANDLER_CHANGED 

    OldHandlerName    testEmail 
    NewHandlerName    System.Web.Mvc.MvcHandler 
    NewHandlerModules   ManagedPipelineHandler 
    NewHandlerScriptProcessor 
    NewHandlerType    System.Web.Mvc.MvcHandler, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 


Como se puede ver parece que ha recogido correctamente la solicitud utilizando mi HttpHandler personalizado testEmail pero MVC lo ha robado.
abrí las definiciones de ruta en RouteConfig.cs y encontraron que la adición:

routes.IgnoreRoute("{resource}.em"); 

lo tengo a ignorar las solicitudes destinadas para mi Handler.
Espero que esto ayude a alguien, ¡me estaba arrancando los pelos!

Cuestiones relacionadas