Sto utilizzando MonoTouch per creare un'app per iPhone. Nell'app sto facendo richieste Web per recuperare informazioni dai servizi Web in esecuzione sul nostro server.Come gestisco/risolve "Errore nel ricevere il flusso di risposta (ReadDone2): ReceiveFailure" quando si utilizza MonoTouch?
Questo è il mio metodo per costruire la richiesta:
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;
}
Poi mi chiamano così:
var request = CreateRequest(URL, METHOD_NAME, args);
request.BeginGetResponse (new AsyncCallback(ProcessResponse), request);
E ProcessResponse assomiglia a questo:
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);
}
}
C'è un altro domanda su questo problema per Monodroid e la risposta suggeriva di chiudere esplicitamente il flusso di output. Ho provato questo ma non risolve il problema. Sto ancora ricevendo un sacco di errori ReadDone2.
Al momento la mia soluzione consiste semplicemente nel reinviare la richiesta Web se si verifica un errore e il secondo tentativo sembra funzionare nella maggior parte dei casi. Questi errori si verificano solo quando eseguo il test sul telefono stesso e non si verificano mai quando si utilizza il simulatore.
Quale server stai usando? –