2009-07-28 17 views
16

He establecido un punto de interrupción en HttpHandler en Visual Studio. HttpHandler es un archivo .ashx que estoy intentando depurar ejecutando mi aplicación en el servidor web de desarrollo de VS. Mi punto de interrupción es no recibiendo un golpe.¿Cómo depurar ASP.net HTTPHandler

¿Cómo puedo atravesarlo?

Editar: Mi punto de interrupción es no ser golpeado

Respuesta

3

Abre el archivo del controlador en Visual Studio y coloca el punto de interrupción como dijiste. A continuación, cargue la aplicación web en su navegador (comenzando su aplicación en modo de depuración, por supuesto). Si el punto de interrupción permanece gris y no se vuelve negro, entonces su manejador probablemente no esté registrado apropiadamente en su aplicación web. Ese es principalmente el problema. Si, según usted, todo está bien, intente limpiar + reconstruir toda la solución. Y configure su proyecto como un proyecto de inicio (si está usando múltiples proyectos). A menudo eso ya ayuda.

+0

¿Cómo se registra el controlador? No creí que debías registrar * .ashx files. –

+0

vea esto para aprender cómo registrar controladores http://msdn.microsoft.com/en-us/library/46c5ddfy(VS.80).aspx – MOZILLA

+0

Eso es lo que pretendía. Probablemente no esté registrado correctamente y, por lo tanto, su punto de corte nunca se golpea. – Juri

-1

En Visual Studio, Salida del menú de depuración. Allí encontrarás Step Into, Step Over, etc., y dependiendo de la vinculación de tu teclado, normalmente puedes presionar F10.

2

Pruebe a depurar utilizando el servidor web incorporado en lugar del IIS local (o viceversa si está utilizando el IIS local). Hay pequeñas diferencias entre los dos servidores web.

+0

Este es siempre mi problema cuando tengo problemas para depurar proyectos web. Por algún motivo, Visual Studio 2013 parece tener como valor predeterminado IIS Express ... ¡que nunca quiero! – Kik

6

Tuve este problema y resulta que el archivo ashx no se compiló. Supongo que se compilan en tiempo de ejecución porque no obtuve un error de compilación hasta entonces. Además no estaba viendo la pantalla amarilla de la muerte lo que indica un HttpCompileException porque:

  • que originalmente la intención de corregir un error en el archivo asxh.
  • Realicé cambios en el archivo para corregir el error, en el cual, sin saberlo, introduje un error de compilación.
  • Probé la corrección de errores, obtuve la excepción amistosa de uso múltiple que había configurado en los errores personalizados.
  • Supuse que era el mismo error que había entrado en solución, porque no podía ver la verdadera excepción de una pantalla amarilla la de la Muerte y no se molestó en comprobar ELMAH
  • puse un punto de interrupción, y no podía entender por qué no fue golpeado.

Finalmente vi la excepción de reciente introducción, fija el error de compilación, y ahora el punto de interrupción está siendo golpeado como debería, aunque no se ilumina cuando se puso en marcha inicialmente el depurador, en lugar cuando el controlador está invocado (por una llamada AJAX en mi caso).

+0

Esto es muy común, ¡gracias por señalar esto! – mare

+0

gracias que arregló mi problema.Un error de compilación que no se informa al construir el proyecto. – pauldendulk

0

Tuve el mismo problema al depurar usando IIS.

Fix: * Agregue una asignación de controlador en IIS: especifique el tipo como su nombre de clase de controlador completo (por ejemplo, MyCompany.MyApp.MyHandler).

Mi web.config también tenía un elemento httpHandlers:

<add verb="*" path="*.p1s" type="MyCompany.MyApp.MyHandler, MyWebService" /> 

(donde mi ensamblado generado fue MyWebService.dll)

0

Las soluciones anteriores no funcionó para mí. Ya tenía mi controlador registrado correctamente.

Mi controlador está en un proyecto de sitio web (no una aplicación web). Se accede a él desde otro sitio web (un proyecto de prueba) en la misma solución de Visual Studio. Para cargar los símbolos de depuración, configuro la solución para iniciar varios proyectos al inicio. Primero mi controlador, luego mi proyecto de prueba.

9

Última respuesta, pero puede servir si no ha encontrado su respuesta con las anteriores.

Si ha creado su controlador copiando un controlador de ashx existente, su problema puede ser que el archivo de marcado de su controlador todavía esté apuntando al controlador original.

VS abre de manera predeterminada el archivo .ashx.cs al hacer doble clic en el archivo .ashx ya que el archivo de marcado casi nunca es necesario.

Al hacer clic derecho en el ashx VS mostrará la opción para ver el marcado, asegúrese de que la propiedad Class no se está refiriendo al controlador anterior.

<%@ WebHandler Language="C#" CodeBehind="MyNewHandler.ashx.cs" 
    Class="mynamespace.MyOldHandler" %> 
+0

Gracias @Giuseppe, esto lo arregló para mí, y es algo que es fácil pasar por alto, especialmente cuando se copia un manejador existente de un proyecto diferente y se olvida de actualizar la propiedad ** Class ** del archivo 'Marcado' para que apunte al nuevo ** espacio de nombres **. –

+0

muchas gracias por esta respuesta, ¡solo esto me ayudó! –

0

Si está fallando para depurar un controlador HTTP accediendo al mismo desde una página web dentro de su aplicación, intente acceder a la URL del controlador directamente en el navegador web.

por ejemplo:

http://localhost/YourSite/YourHandler.ashx 
0

he encontrado el método utilizado para depurar servicios de Windows también trabaja para el controlador HTTP:

public void ProcessRequest(System.Web.HttpContext objContext) 
    { 
// This will automatically launch a dialog that will allow to attach the process to a new or existing instance of Visual Studio 
#if DEBUG 
    System.Diagnostics.Debugger.Launch(); 
#endif 
[...] 

Se pone el código anterior en su método ProcessRequest, edificaréis Depure e implemente en su máquina local. Manteniendo abierto el proyecto en Visual Studio, cuando su sitio web invoca el controlador, aparecerá un cuadro de diálogo que le permitirá elegir esa instancia. Una vez que seleccione la instancia, cambie a VS y verá que la ejecución se encuentra en System.Diagnostics.Debugger.Launch(); línea, esperando que continúes.

1

Ninguna de las anteriores trabajó para mí con Visual Studio 2015, sin embargo la respuesta de sorinc me dio un indicio de añadir lo siguiente a algún lugar cerca del principio del archivo de controlador:

System.Diagnostics.Debugger.Break(); 

El depurador luego se detuvo en los puntos de interrupción que tenía conjunto.

0

Probé algunas de las sugerencias anteriores sin suerte. Luego abrí mi web.config y la solución era obvia. Tenía el atributo de depuración del nodo <compilation> establecido en falso en el nodo <system.web>. Una vez que configuré esto como verdadero, volví a compilar e inicié la aplicación con la depuración, mi punto de interrupción recibió un golpe.

<system.web> 
    <compilation debug="true" /> 
</system.web> 
Cuestiones relacionadas