gpt4 book ai didi

iphone - 使用 MonoTouch 时如何处理/修复 "Error getting response stream (ReadDone2): ReceiveFailure"?

转载 作者:行者123 更新时间:2023-12-03 18:56:32 24 4
gpt4 key购买 nike

我正在使用 MonoTouch 构建 iPhone 应用程序。在应用程序中,我发出 Web 请求,从我们服务器上运行的 Web 服务中提取信息。

这是我构建请求的方法:

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 请求,并且第二次尝试在大多数情况下似乎都有效。这些错误仅在我在手机上进行测试时才会发生,而在使用模拟器时不会发生。

最佳答案

只要有可能,请尝试使用 WebClient因为它会自动处理很多细节(包括流)。它还可以更轻松地使您的请求异步,这通常有助于不阻塞 UI。

例如WebClient.UploadDataAsync看起来是上面的一个很好的替代品。当从 UploadDataCompleted 事件接收到数据时,您将获得数据(示例 here )。

此外,您确定您的请求始终并且仅使用System.Text.Encoding.ASCII吗?默认情况下,经常使用 System.Text.Encoding.UTF8,因为它可以表示更多字符。

更新:如果您发送或接收大量字节[](或字符串),那么您应该考虑使用 OpenWriteAsync 方法和 OpenWriteCompleted 事件。

关于iphone - 使用 MonoTouch 时如何处理/修复 "Error getting response stream (ReadDone2): ReceiveFailure"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8830653/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com