Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “收到”;“请求已被取消”;将JSON数据写入HttpWebRequest时出错_C#_.net_Monodevelop_Xamarin - Fatal编程技术网

C# “收到”;“请求已被取消”;将JSON数据写入HttpWebRequest时出错

C# “收到”;“请求已被取消”;将JSON数据写入HttpWebRequest时出错,c#,.net,monodevelop,xamarin,C#,.net,Monodevelop,Xamarin,我使用Monodevelop编写了一个用C#编写的iOS应用程序,作为应用程序的一部分,我调用了一个web服务。web服务调用要求将JSON数据写入请求。但是,我第一次尝试写入数据时收到一个错误;使用相同参数对相同方法的所有后续调用都有效。以下是相关代码的一个片段: //开始代码段 HttpWebRequest request=(HttpWebRequest)HttpWebRequest.Create(_connectionSettings.Uri); 请求。超时=15000;//毫秒 如果(_

我使用Monodevelop编写了一个用C#编写的iOS应用程序,作为应用程序的一部分,我调用了一个web服务。web服务调用要求将JSON数据写入请求。但是,我第一次尝试写入数据时收到一个错误;使用相同参数对相同方法的所有后续调用都有效。以下是相关代码的一个片段:

//开始代码段
HttpWebRequest request=(HttpWebRequest)HttpWebRequest.Create(_connectionSettings.Uri);
请求。超时=15000;//毫秒
如果(_connectionSettings.Username!=“”){
request.Credentials=新的网络凭据(_connectionSettings.Username,_connectionSettings.Password);
}
如果(员额){
request.Method=“POST”;
request.ContentType=“application/json”;
if(jsonData!=null){
byte[]byteArray=System.Text.Encoding.UTF8.GetBytes(jsonData);
request.ContentLength=byteArray.Length;
使用(Stream ds=request.GetRequestStream()){//
系统。例外情况:
在写入所有字节之前,无法关闭流
---内部异常堆栈跟踪的结束---at

System.Net.WebConnectionStream.Close() [0x00121]英寸

/开发者/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、, /Path/To/My/Class.cs:192中的布尔suppressAlert)[0x00101]

知道我做错了什么吗

编辑


好的,很明显,在单步执行应用程序时,该方法每次都有效。我注意到,当抛出错误时,request.ContentLength为零,尽管byteArray.Length不为零。但是,在单步执行应用程序时,request.ContentLength保留了byteArray的预期值.Length。好的,看起来我们根本不需要设置request.ContentLength。删除行:

request.ContentLength = byteArray.Length;

完全修复了该问题。我仍然很好奇这是否是库中的一个错误,因为大多数代码示例显示设置HttpWebRequest的ContentLength,并且它在后续尝试中正常工作。

好的,看起来我们根本不需要设置request.ContentLength。删除该行:

request.ContentLength = byteArray.Length;

完全修复了这个问题。我仍然很好奇这是否是库中的一个bug,因为大多数代码示例显示设置HttpWebRequest的ContentLength,并且它在后续尝试中正常工作。

您可以尝试使用(Stream ds=request.GetRequestStream()更改语句吗{//@srsyogesh,感谢您的回复。接受这些参数的StreamWriter.Write没有重载。但是,使用ds.Write(byteArray)会引发错误“System.Net.ProtocolViolationException-要写入的字节数大于指定的ContentLength”似乎发生了我在编辑中提到的相同问题,特别是request.ContentLength有一个零值,即使byteArray.Length不是零。可以设置request.ContentLength=byteArray.Length来解决这个问题吗?不确定只是一个查看异常的想法,或者正如您在编辑中提到的,这两个值已经相同了??@srsyogesh是,在使用之前(流ds=request.GetRequestStream())我设置了request.ContentLength=byteArray.Length。在该位置放置断点,我看到request.ContentLength的值确实等于byteArray.Length。但是,当我恢复应用程序并抛出后续错误时,request.ContentLength的值则为零。有趣的是,如果我不恢复应用程序但是在应用程序中,request.ContentLength仍然等于byteArray.Length,应用程序可以工作!如图所示。您可以尝试使用(Stream ds=request.GetRequestStream()更改语句吗{//@srsyogesh,感谢您的回复。接受这些参数的StreamWriter.Write没有重载。但是,使用ds.Write(byteArray)会引发错误“System.Net.ProtocolViolationException-要写入的字节数大于指定的ContentLength”似乎发生了我在编辑中提到的相同问题,特别是request.ContentLength有一个零值,即使byteArray.Length不是零。可以设置request.ContentLength=byteArray.Length来解决这个问题吗?不确定只是一个查看异常的想法,或者正如您在编辑中提到的,这两个值已经相同了??@srsyogesh是,在使用之前(流ds=request.GetRequestStream())我设置了request.ContentLength=byteArray.Length。在该位置放置断点,我看到request.ContentLength的值确实等于byteArray.Length。但是,当我恢复应用程序并抛出后续错误时,request.ContentLength的值则为零。有趣的是,如果我不恢复应用程序但是,在应用程序中,request.ContentLength仍然等于byteArray.Length,应用程序可以运行!Go figure.msdn说在发送数据的地方需要这样做(),但您是对的,在Xamarin上删除该行可以解决问题。msdn说在发送数据的地方需要这样做(),但你是对的,在Xamarin上删除该行可以解决问题。