我正在尝试通过Monotouch上的Web客户端发送XML。虽然一切都在iOS模拟器上运行,但当应用程序在设备上运行时,我会遇到异常。这是代码。
try
{
Byte[] sendData = System.Text.Encoding.UTF8.GetBytes(someXML) ;
WebClient client = new WebClient();
Byte[] forResp;
client.Headers.Add("Content-Type","text/xml");
bresp = wc.UploadData(URL, sendData);
string resp = System.Text.Encoding.ASCII.GetString(forResp);
XmlDocument xresp = new XmlDocument();
xresp.LoadXml(resp);
return xresp;
}
catch
{
// error
}
我尝试了WebClient,因为我遇到了与HttpWebRequest相同的问题。
例外:
The request timed out
System.Net.WebException: The request timed out
at System.Net.HttpWebRequest.EndGetResponse (IAsyncResult asyncResult) [0x00065] in /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net/HttpWebRequest.cs:830
at System.Net.HttpWebRequest.GetResponse () [0x0000e] in /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net/HttpWebRequest.cs:836
at System.Net.WebClient.GetWebResponse (System.Net.WebRequest request) [0x00000] in /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net/WebClient.cs:1433
at System.Net.WebClient.ReadAll (System.Net.WebRequest request, System.Object userToken) [0x00000] in /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net/WebClient.cs:866
at System.Net.WebClient.UploadDataCore (System.Uri address, System.String method, System.Byte[] data, System.Object userToken) [0x00038] in /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net/WebClient.cs:462
at System.Net.WebClient.UploadData (System.Uri address, System.String method, System.Byte[] data) [0x00035] in /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net/WebClient.cs:441
答案 0 :(得分:2)
堆栈跟踪告诉我们当WebClient
尝试从服务器获取响应时(而不是在将数据上传到服务器时)发生超时。这意味着访问服务器不是问题(为什么stacktraces非常有用; - )
接下来的步骤取决于您是否具有服务器的控制权。如果您控制服务器,请检查它的日志以查找请求并查看其处理方式。如果可能,还要确保您在模拟器和设备之间以相同方式接收/解码数据。
如果您不控制服务器,那么就很难知道它内部发生了什么。例如。也许它不喜欢请求(即服务器代码可以根据任何条件决定不回答,包括用户代理)。
在这种情况下,使用像wireshark
这样的工具通常是您最好的选择。比较iOS模拟器和设备的会话。
请求是否相同?例如您上传的数据可能因其他内容而有所不同;
服务器是否在接听设备?具有相同的状态代码?在同一时间框架内?
如果一切都相同,那么您可能发现了一个错误。请将其(以及上述信息和文件)报告给http://bugzilla.xamarin.com
否则,你应该有更准确的线索来调试问题和/或更新问题更具体: - )