我使用MonoTouch的構建iPhone應用程序。在應用程序中,我正在使Web請求從我們的服務器上運行的Web服務撤回信息。如何處理/修復「錯誤獲取響應流(ReadDone2):ReceiveFailure」使用MonoTouch的時候?
這是我的方法來構造請求:
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;
}
然後我把它稱爲是這樣的:
var request = CreateRequest(URL, METHOD_NAME, args);
request.BeginGetResponse (new AsyncCallback(ProcessResponse), request);
而且ProcessResponse看起來是這樣的:
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);
}
}
還有另一種關於這個問題Monodroid的問題和那裏的答案建議明確關閉輸出流。我試過這個,但它不能解決問題。我仍然遇到很多ReadDone2錯誤。
我此刻的一種解決方法是隻需重新提交,如果發生錯誤,並在第二次嘗試似乎在大多數情況下工作的Web請求。這些錯誤只發生在我在手機上進行測試並且在使用模擬器時從不發生。
哪個服務器您使用的? – 2012-01-12 14:32:24