2009-01-20 14 views
5

¿Cuál es una cantidad de tiempo razonable para esperar a que vuelva una solicitud web? Sé que esto es quizás un poco cargado como una pregunta, pero todo lo que estoy tratando de hacer es verificar si una página web está disponible.Tiempo de espera para la solicitud web

¿Tal vez hay una manera mejor?

try 
{ 
    // Create the web request 
    HttpWebRequest request = WebRequest.Create(this.getUri()) as HttpWebRequest; 

    request.Credentials = System.Net.CredentialCache.DefaultCredentials; 

    // 2 minutes for timeout 
    request.Timeout = 120 * 1000; 

    if (request != null) 
    { 
     // Get response 
     response = request.GetResponse() as HttpWebResponse; 

     connectedToUrl = processResponseCode(response); 
    } 
    else 
    { 
     logger.Fatal(getFatalMessage()); 

     string error = string.Empty; 
    } 
} 
catch (WebException we) 
{ 
... 
} 
catch (Exception e) 
{ 
... 
} 

Respuesta

5

Debe considerar cuánto tiempo tardará el consumidor del servicio web, p. si se está conectando a un servidor web DB y ejecuta una consulta larga, necesita hacer que el tiempo de espera del servicio web sea más prolongado que el tiempo que tardará la consulta. De lo contrario, el servicio web pasará (erróneamente) el tiempo de espera.

También uso algo así como (tiempo de consumo) + 10 segundos.

2

Offhand Permitiría 10 segundos, pero realmente depende del tipo de conexión de red con la que se ejecutará el código. Intente ejecutar algunas pruebas durante un período de unos días/semanas para ver cuál es el tiempo de respuesta típico.

1

La cantidad razonable de tiempo para esperar una solicitud web puede diferir de un servidor a otro. Si un servidor se encuentra en el extremo de un enlace de alta demora, claramente llevará más tiempo responder que cuando está en la habitación contigua. Pero dos minutos parece que es más que suficiente tiempo para que un servidor responda. El valor de tiempo de espera predeterminado para el comando PING se expresa en segundos, no en minutos. Le sugiero que busque en los valores de tiempo de espera que utilizan las utilidades de red como PING o TRACERT para obtener inspiración.

1

Solo esperaría (MAX) 30 segundos, probablemente más cerca de 15. Depende realmente de lo que esté haciendo y del resultado de una conexión fallida. Como estoy seguro que usted sabe que hay un montón de razones por las que podría conseguir un tiempo de espera ...

1

supongo que esto depende de dos cosas:

  • velocidad de la red/carga (como otros escribieron, utilizando la fuerza de ping darle una idea sobre esto)
  • el tipo de página que está llamando: por ejemplo ¿es una página HTML estática o es una página que puede hacer algunas operaciones que consumen mucho tiempo (acceso a BD, etc.)

De todos modos, creo que 2 minutos es mucho tiempo. I definitivamente reduciría el tiempo de espera a menos de 30 segundos.

2

Mediría el tiempo que tardan las páginas para responder. Si todos responden en aproximadamente la misma cantidad de tiempo, entonces establecería el período de tiempo de espera para duplicar aproximadamente esa cantidad.

1

Me doy cuenta de que esto no responde directamente a su pregunta, pero luego una "respuesta" a esta pregunta es un poco difícil. De todos modos, una herramienta que he usado gomez en el pasado para medir los tiempos de carga de varias partes del mundo. Es gratis y si no ha realizado este tipo de prueba antes, podría ser útil en términos de darle una idea firme de los tiempos típicos de carga de página para una página dada desde una ubicación determinada.

2

Solo quería agregar que gran parte del tiempo usaré un tiempo de espera adaptativo. Podría ser una métrica simple como:

period += (numTimeouts/numRequests > .01 ? someConstant: 0);

comprueba cada vez que aplica un tiempo de espera para tratar de mantener los tiempos de espera por debajo del 1% (por ejemplo). Solo tenga cuidado de disminuirlo demasiado :)

Cuestiones relacionadas