我有一个使用 Monodevelop 用 C# 编写的 iOS 应用程序,作为应用程序的一部分,我调用了一个 Web 服务。Web 服务调用要求将 JSON 数据写入请求。但是,我第一次尝试写入数据时收到错误消息;对具有相同参数的相同方法的所有后续调用都有效。以下是相关代码的片段:
// Start snippet
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create (_connectionSettings.Uri);
request.Timeout = 15000; // milliseconds
if (_connectionSettings.Username != "") {
request.Credentials = new NetworkCredential (_connectionSettings.Username, _connectionSettings.Password);
}
if (post) {
request.Method = "POST";
request.ContentType = "application/json";
if (jsonData != null) {
byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(jsonData);
request.ContentLength = byteArray.Length;
using (Stream ds = request.GetRequestStream()) { //<--- ERROR HERE
ds.Write (byteArray, 0, byteArray.Length);
}
} else {
request.Method = "GET";
}
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) {
// end snippet
我得到的错误如下:
System.Net.WebException:请求被取消。---> System.Exception:在写入所有字节之前无法关闭流---内部异常堆栈跟踪结束---在
System.Net.WebConnectionStream.Close () [0x00121] 在
/Developer/MonoTouch/Source/mono/mcs/class/System/System.Net/WebConnectionStream.cs:785 在 System.IO.Stream.Dispose () [0x00000] 中
/Developer/MonoTouch/Source/mono/mcs/class/corlib/System.IO/Stream.cs:93 在
MyCustomMethod (System.String& responseString, System.String jsonData, Boolean post, Boolean suppressAlert) [0x00101] in /Path/To/My/Class.cs:192
有什么想法我可能做错了吗?
编辑
好的,显然在单步执行应用程序时,该方法每次都有效。我注意到的是,当抛出错误时, request.ContentLength 为零,尽管 byteArray.Length 不为零。但是,在单步执行应用程序时,request.ContentLength 会保持 byteArray.Length 的预期值。