2011-03-29 17 views
5

Tengo una aplicación silverlight 4 que usa la pila ClientHttp para hacer una WebRequest que sirve una secuencia binaria. Luego leo de esta secuencia y hago cosas. Sin embargo, tengo el siguiente problema: el servidor almacena en búfer los datos que envía, de modo que el proceso de envío es como enviar-pausar-enviar-pausar-enviar ...Silverlight ClientHttp WebRequest timeout

A veces el servidor demora un poco más (alrededor de 20 segundos), en cuyo punto la conexión parece romperse de alguna manera. No recibo ninguna excepción en Silverlight, en realidad para el código parece que la lectura de la secuencia de respuesta web terminó bien (es decir, no hay más datos). Sin embargo, el servidor en realidad no envió todos sus datos (que puedo probar desde una aplicación que no sea Silverlight que obtendrá más datos después de esa pausa). Estoy pensando que esto podría ser un problema de tiempo de espera (que por lo que he leído no se puede configurar en Silverlight explícitamente), pero es extraño que no reciba una Excepción que indique el tiempo de espera. Además, la pausa no es tan larga, esperaría que 20 segundos fuera un tiempo razonable.

También he observado el tráfico TCP y parece que después de la pausa, Silverlight envía un mensaje FIN al servidor. Parece que se acaba el tiempo y decide romper la conexión, pero en realidad no informa el tiempo de espera como una excepción o me da ninguna forma de evitarlo.

Alguna idea de lo que está pasando realmente y cómo podría evitarlo?

Gracias!

ACTUALIZACIÓN: He encontrado el problema. Hay una clave de registro que controla el comportamiento de tiempo de espera de solicitud web en todo el sistema y algunas aplicaciones lo configuran en 10 segundos (por ejemplo, Instalar en cualquier lugar) y "olvidan" volver a configurarlo alguna vez. La clave es esta: HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ ReceiveTimeout

Lo cambié a un valor mayor y ¡ahora funciona bien! Hth.

+0

Quizás pueda responder su propia pregunta aquí con la solución, me perdí esto y me pasé medio día tratando de resolver el mismo problema, ignoré las preguntas de StackOverflow que no fueron respondidas. – Andronicus

Respuesta

0

citando Meramente la OP pero proporcionando una respuesta:

UPDATE: Encontrado el problema. Hay una clave de registro que controla el comportamiento de tiempo de espera de solicitud web en todo el sistema y algunas aplicaciones lo configuran en 10 segundos (por ejemplo, Instalar en cualquier lugar) y "olvidan" volver a configurarlo alguna vez. La clave es esta: HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ ReceiveTimeout

Lo cambié a un valor mayor y ¡ahora funciona bien! Hth.