2010-05-27 17 views
18

Estamos en el proceso de reemplazar una aplicación de servicio de Windows antigua (más de 5 años) creada con VS2005 que realiza una llamada HTTP GET. Hay varias cosas que dificultan esto (como que el servidor web está en la red del cliente y no podemos conectarnos directamente a él) y, lamentablemente, preferimos no eliminar el sistema en ejecución para reemplazarlo por un WinForm. versión que puede ser monitoreada por Fiddler. El nuevo código parece estar haciendo todo correctamente, pero, por desgracia, no se está autenticando.¿Hay alguna manera de configurar Fiddler para interceptar llamadas HTTP desde un servicio de Windows?

¿Hay alguna manera de configurar Fiddler (2.2.9.1) para interceptar llamadas HTTP desde un servicio de Windows?

Respuesta

34

Codeka proporcionó una pista para que vaya en la dirección correcta. La pieza que aún faltaba era cómo configurar el proxy. El <appname>.exe.config necesitaba tener una sección como la siguiente añadido:

<system.net> 
     <defaultProxy enabled="true"> 
       <proxy proxyaddress="http://127.0.0.1:8888" bypassonlocal="False"/> 
     </defaultProxy> 
</system.net> 

Una vez hecho esto el tráfico HTTP del servicio de Windows comenzó a fluir a través de Fiddler.

+1

http://www.fiddler2.com/fiddler/help/hookup.asp#Q -DOTNET – EricLaw

+0

@Eric - Gracias por publicar el enlace. De hecho, había visto ese elemento de Preguntas frecuentes mientras seguía la pista de Codeka. Simplemente no era inmediatamente obvio que se aplicaba a los servicios de Windows. –

+0

FWIW, no tiene nada que ver con "Servicios de Windows" y todo tiene que ver con el hecho de que su servicio está escrito en .NET. :-) – EricLaw

5

Fiddler solo actúa como un proxy HTTP, por lo que si puede configurar un proxy en su servicio, puede configurarlo para que pase por Fiddler. Si eso es posible es difícil de decir ...

Si eso no funciona, puede hacerlo ejecutando Fiddler en una segunda computadora y configurándolo para escuchar en el puerto 80. Luego en su computadora de "prueba", edite los hosts archivan para que apunte a la segunda computadora. Por ejemplo, supongamos que el servicio web está en www.example.com, configura su servidor de prueba para que "www.example.com" apunte a su segunda computadora (ejecutando Fiddler). Luego, cuando el servicio vaya a conectarse a "www.example.com", se conectará a Fiddler en en realidad. Fiddler reenviará la conexión al real www.example.com luego de registrar la solicitud/respuesta.

No he probado lo anterior, pero creo que funcionaría. Obviamente, si puede configurar las configuraciones de proxy en su servicio, ¡eso sería más fácil!

3

Y, por supuesto, si Fiddler no funciona, siempre hay Wireshark. Como sugerencia, use un par de filtros en Wireshark (por ejemplo, muestre solo los paquetes que van o vienen de la IP de destino) para evitar sentir que está siendo invadido con datos.

2

Como .NET omite los proxies para localhost y 127.0.0.1, simplemente codifique el nombre de su máquina en lugar de la URL con la que está probando.

//myUrl = "http://127.0.0.1/myservice"; 
myUrl = "http://mymachine/myservice"; 
-1

Nota: Importante: Independientemente de otros ajustes, .NET siempre utilizar el servidor proxy para las URL que contienen violinista localhost. Entonces, en lugar de usar localhost, cambie su código para referirse al nombre de la máquina. Por ejemplo:

Esta URL no aparecerán en Fiddler:

http://localhost/X509SignCodeService/X509SigningService.asmx Esta URL aparecerán en Fiddler:

Cuestiones relacionadas