Así que mi aplicación está intercambiando solicitudes/respuestas con un servidor (sin problemas), hasta que la conexión a Internet muere durante un par de segundos, luego vuelve. A continuación, un código como el siguiente:Intenta hablar con el servidor cuando Internet no funciona
response = (HttpWebResponse)request.GetResponse();
arrojará una excepción, con un estado como ReceiveFailure
, ConnectFailure
, KeepAliveFailure
etc.
Ahora, es muy importante que si la conexión a Internet se vuelve, yo soy poder seguir comunicándome con el servidor; de lo contrario, tendría que volver a comenzar desde el principio y eso llevará mucho tiempo.
¿Qué le parecería reanudar esta comunicación cuando Internet vuelva?
Por el momento, sigo buscando la posibilidad de comunicarme con el servidor, hasta que sea posible (al menos teóricamente). Mi intento de código es el siguiente:
try
{
response = (HttpWebResponse)request.GetResponse();
}
catch (WebException ex)
{
// We have a problem receiving stuff from the server.
// We'll keep on trying for a while
if (ex.Status == WebExceptionStatus.ReceiveFailure ||
ex.Status == WebExceptionStatus.ConnectFailure ||
ex.Status == WebExceptionStatus.KeepAliveFailure)
{
bool stillNoInternet = true;
// keep trying to talk to the server
while (stillNoInternet)
{
try
{
response = (HttpWebResponse)request.GetResponse();
stillNoInternet = false;
}
catch
{
stillNoInternet = true;
}
}
}
}
Sin embargo, el problema es que la declaración segundo try-catch mantiene lanzar una excepción, incluso cuando el Internet está de vuelta.
¿Qué estoy haciendo mal? ¿Hay alguna otra manera de arreglar esto?
Gracias!
No es una respuesta a su pregunta, pero si su conexión se interrumpe durante un tiempo prolongado, realmente no tiene una buena manera de matar esto en este momento ... – Paddy
El servidor también tiene un tiempo de espera de 5 minutos, por lo tanto, si la conexión realmente baja por más de 5 minutos, entonces esa es la manera de matarlo. – Andrei
¿por qué no configura un temporizador para probar una conexión cada 10 minutos y luego reinicia lo que estaba haciendo? o tal vez cada vez que hay una falla de conexión, aumente el tiempo de espera en un minuto. –