Estoy usando MonoTouch para construir una aplicación de iPhone. En la aplicación realizo solicitudes web para recuperar información de los servicios web que se ejecutan en nuestro servidor.¿Cómo manejo/arreglo "Error al obtener la secuencia de respuesta (ReadDone2): ReceiveFailure" cuando se usa MonoTouch?
Este es mi método para construir la solicitud:
public static HttpWebRequest CreateRequest(string serviceUrl, string methodName, JsonObject methodArgs)
{
string body = "";
body = methodArgs.ToString();
HttpWebRequest request = WebRequest.Create(serviceUrl) as HttpWebRequest;
request.ContentLength = body.Length; // Set type to POST
request.Method = "POST";
request.ContentType = "text/json";
request.Headers.Add("X-JSON-RPC", methodName);
StreamWriter strm = new StreamWriter(request.GetRequestStream(), System.Text.Encoding.ASCII);
strm.Write(body);
strm.Close();
return request;
}
Entonces me llaman así:
var request = CreateRequest(URL, METHOD_NAME, args);
request.BeginGetResponse (new AsyncCallback(ProcessResponse), request);
Y ProcessResponse se parece a esto:
private void ProcessResponse(IAsyncResult result)
{
try
{
HttpWebRequest request = (HttpWebRequest)result.AsyncState;
using (HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result)) // this is where the exception gets thrown
{
using (StreamReader strm = new System.IO.StreamReader(response.GetResponseStream()))
{
JsonValue value = JsonObject.Load(strm);
// do stuff...
strm.Close();
} // using
response.Close();
} // using
Busy = false;
}
catch(Exception e)
{
Console.Error.WriteLine (e.Message);
}
}
Hay otro pregunta sobre este tema para Monodroid y la respuesta allí sugirió cerrar explícitamente el flujo de salida. Intenté esto pero no resuelve el problema. Todavía estoy recibiendo muchos errores de ReadDone2.
Mi solución en este momento implica simplemente volver a enviar la solicitud web si se produce un error y el segundo intento parece funcionar en la mayoría de los casos. Estos errores solo ocurren cuando estoy realizando pruebas en el teléfono y nunca aparecen cuando uso el simulador.
Qué servidor está usando? –