2009-06-23 7 views
16

Me aparece un error extraño. He configurado un script que funciona perfectamente cuando Fiddler está abierto: descarga un informe de un sitio web usando httpwebrequest y todo funciona bien.Httpwebreqest funciona con Fiddler En caso contrario, Timeout

SIN EMBARGO solo funciona cuando Fiddler está abierto? Cuando el violinista no funciona, acabo de recibir un "Problema de tiempo de espera de solicitud"

¿Alguien sabe cómo solucionar esto y hacerlo funcionar con mi aplicación ASP.NET MVC?

Gracias

Editar: Gracias por la respuesta! Con respecto al proxy, quería probar este script en Windows Azure, ¿qué tan poco confundido sobre cómo configurar la configuración predeterminada del proxy?

+1

he oído a algunas personas reportan que se encuentran con problemas así- básicamente violinista * aumenta * el rendimiento de carga frente a algunas configuraciones de cliente comunes. En general, a menos que pueda ajustar el software del cliente (por ejemplo, cambiar los tamaños del búfer de carga) su mejor opción es aumentar el tiempo de espera en el servidor para permitir un período más largo antes de la carga. En cuanto a * why * Fiddler ayuda en este escenario, Fiddler almacena las solicitudes por defecto, por lo que su aplicación envía la solicitud completa a Fiddler, que la recopila, ENTONCES establece una conexión con el servidor y envía los datos al servidor como lo más rápido posible. – EricLaw

Respuesta

2

Tenga en cuenta que Fiddler actúa como un proxy. Tener una aplicación funcionando cuando Fiddler se está ejecutando pero no de otra manera podría indicar un problema con la configuración del proxy predeterminada. Abra las Opciones de Internet (posiblemente a través de IE) y verifique su configuración de proxy. En particular, tenga en cuenta si está configurando a través de un script.

Mencionaré una posibilidad muy improbable, aunque en realidad me sucedió a mí. Tenía un determinado producto antivirus instalado en mi máquina. Por alguna razón, pensó que mi Suscripción había expirado. El resultado fue que el software no se ejecutaría, y por lo tanto no podría actualizar la lista de programas permitidos para acceder a Internet. Los programas que instalé después de la caducidad no funcionarían a menos que Fiddler se estuviera ejecutando (ya que Fiddler se instaló antes del vencimiento, estaba en la lista "Bueno"). Cualquier otro programa instalado después del vencimiento estaba en la lista "Malo" (por defecto).

+0

¡Gracias por la respuesta! Con respecto al proxy, quería probar este script en Windows Azure, ¿qué tan poco confundido sobre cómo configurar la configuración predeterminada del proxy? –

+0

¿Ya lo tienes funcionando en tu sistema Windows normal? Hazlo antes de preocuparte por Azure. –

1

¿Se está ejecutando con HTTPS? Si es así, es posible que su código no confíe en el certificado del sitio remoto, y Fiddler podría estar transfiriendo los datos a su aplicación. Envíenos el mensaje de error y una cantidad mínima de código que replica este problema.

+0

Hola Dave, sí, corriendo con HTTPS. No estoy en mi PC donde está el código (en el trabajo) ninguna idea (si es el caso) ¿cómo solucionar este problema? –

+0

Eche un vistazo a http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.servercertificatevalidationcallback.aspx. Probablemente necesites decirle a tu código que acepte el certificado del sitio con el que estás hablando. –

+0

Fiddler mostrará un cuadro de diálogo de advertencia modal si el sitio presenta el certificado incorrecto, por lo que no creo que eso sea lo que este usuario encuentre. – EricLaw

11

Para los buscadores, aquí hay otro pensamiento. Tengo una aplicación que manipula mi sitio web de manera robótica. La aplicación utiliza HttpWebRequest y HttpWebResponse en .Net 4.0. Después de dos o 3 GET exitosas, la siguiente se cerraría de manera consistente. Otra publicación sugirió que si no se cierra correctamente una HINTERNET podría causar que una aplicación se bloquee en un GET posterior al mismo host debido a un límite en el número de conexiones paralelas al mismo host. No sé si esto es lo que sucedía bajo las sábanas, pero pensé que volvería y determinaría dónde podría cerrar las cosas.

Cerré todos mis objetos HttpWebResponse en el código y mi problema desapareció. A partir de esto, no veo por qué Fiddler enmascararía el problema, pero lo hizo. Antes de agregar los cierres, se agotaría el tiempo de espera de una solicitud específica en la secuencia. Después de cerrar las respuestas, todo se aclaró y pude ejecutar sin proxy a través de Fiddler.

+0

Sí, este era mi problema. Tan simple, estaba fallando consistentemente después de 2 solicitudes. Gracias Prof! –

+0

Puedo confirmar también - una respuesta simple. Cerrar(); arregló mi problema – Anders

+0

También me gustaría añadir mi agradecimiento por esta publicación (¡4 años más tarde!), Ya que esto también se aplica a los objetos Powershell3 y System.Net.WebRequest que no se limpian cuando salen del alcance; así que tuve que agregar una llamada a [System.Net.WebRequest] .abort() antes de salir del alcance y en todos los bloques try/catch. – JonnyG

3

Cerrar todos los objetos HttpWebRequest como @ProfVonLemongargle sugirió que se corrigió el mismo problema que estaba teniendo.

Es probable que Fiddler esté cerrando las conexiones al servidor, por lo que la limitación de conexión simultánea queda enmascarada cuando la aplicación la usa como proxy. Consulte este hilo para obtener información adicional: HttpWebRequest times out on second call

1

cadena anterior, pero descubrí el mismo problema en nuestro código. Fue porque había comandos sobrantes console.log en el javascript. Esto condujo a un código javascript bloqueado.

0

Tuve el mismo problema en una red corporativa, ¡abrí Fiddler2 para diagnosticar lo que se enviaba/recibía y el problema desapareció! Después de seguir investigando, descubrí que Fiddler hace un túnel de tráfico a través de él como un proxy y mi red corporativa también usa un script de configuración automática para un proxy (supongo que Fiddler estaba haciendo un túnel a través del proxy del sistema adecuado del que mi aplicación no tenía conocimiento)

para que mi programa de VB.net correr todo lo que tenía que hacer era agregar la configuración de proxy para la solicitud:

Dim proxy = WebRequest.GetSystemWebProxy() 
oRequest.Proxy = proxy