System.Net.ProtocolViolationException:在调用 GetResponse之前,必须将ContentLength字节写入请求流
我得到了
“System.Net.ProtocolViolationException:在调用Web请求的”BeginGetResponse“方法时,必须在调用[Begin] GetResponse”错误之前将ContentLength字节写入请求流。
这是我的代码:
try { Stream dataStream = null; WebRequest Webrequest; Webrequest = WebRequest.Create(this.EndPointAddress); Webrequest.Credentials = new NetworkCredential(this.username, this.password); Webrequest.ContentType = "text/xml"; Webrequest.Method = WebRequestMethods.Http.Post; byteArray = System.Text.Encoding.UTF8.GetBytes(xmlRequest.Children[0].InnerXML); Webrequest.ContentLength = byteArray.Length; dataStream = Webrequest.GetRequestStream(); dataStream.Write(byteArray, 0, byteArray.Length); RequestState rs = new RequestState(); rs.Request = Webrequest; IAsyncResult r = (IAsyncResult)Webrequest.BeginGetResponse(new AsyncCallback(RespCallback), rs); } catch (Exception exc) { TRACE.EXCEPTION(exc); } finally { dataStream.Close(); }
更具体地说,在调用函数“getRequestStream()”之后,Stream正在为长度抛出此exception:
‘stream.Length’抛出了’System.NotSupportedException’类型的exception
可能是什么原因造成的?
这最终通过使用:
using (dataStream = Webrequest.GetRequestStream()) { dataStream.Write(byteArray, 0, byteArray.Length); }
代替:
dataStream = Webrequest.GetRequestStream(); dataStream.Write(byteArray, 0, byteArray.Length);
您的代码应该适用于.NET 2.0从4.0及更高版本,您应该在写完后关闭该流:
dataStream = Webrequest.GetRequestStream(); dataStream.Write(byteArray, 0, byteArray.Length); datastream.Close();
检查以validation您的服务器已设置为接受大文件。 您可能会发现您遇到了4兆时的默认限制。
将以下内容添加到web.config文件中以进行更大的文件上载:
上述就是C#学习教程:System.Net.ProtocolViolationException:在调用 GetResponse之前,必须将ContentLength字节写入请求流分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1026902.html