2011-03-08 12 views
5
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
request.Timeout = 20000; 
using (WebResponse response = request.GetResponse()) 
using (var stream = response.GetResponseStream()) 
using (var reader = new StreamReader(stream)) 
{ 
    var result = reader.ReadToEnd(); 
    // Do something with result 
} 

En el ejemplo anterior he definido un tiempo de espera, si sucede a golpear el tiempo de espera de cómo iba a saber, el resultado sería vacío?tiempo de espera de solicitud web?

¿Recibo algún tipo de respuesta?

¿Cómo puedo asegurarme de haber agotado el tiempo de espera?

Respuesta

10

GetResponse() podría lanzar una WebException. Es simple probar exactamente lo que sucede, sin embargo, establezca el tiempo de espera en 1 ms y trate de golpear cualquier cosa que tarde un tiempo en volver.

De hecho, los estados documentation esto explícitamente:

Si el tiempo de espera expira antes de que se puede devolver el recurso, un WebException se lanza.

+0

gracias eso era lo que estaba buscando, no estaba del todo seguro. – Prix

0

Probablemente debería estar utilizando HTTPWebResponse. Tiene un código de estado que le dice esa información y más. HTTPWebResponse es un descendiente de WebResponse.

2

Su llamada HttpWebRequest.GetResponse arrojará un WebException cuando;

Abort was previously called.  
-or-  
The time-out period for the request expired. 
-or-  
An error occurred while processing the request. 

detectar esta excepción.

Solía ​​simplemente tirar de mi cable de red para probar este tipo de cosas a pesar de que podría ser más elegante y utilizar una herramienta proxy y bloquear esa solicitud en particular.

+0

Gracias, 'El período de tiempo de espera para la solicitud expiró. Esto ayuda. – Prix

Cuestiones relacionadas