2017-04-04 134 views
0

我想发布到WCF服务。我收到此错误 “在调用[Begin] GetResponse之前,您必须将ContentLength字节写入请求流。”REST POST到WCF服务

代码:

ASCIIEncoding encoding = new ASCIIEncoding(); 

string postData = "patron=WTM"; 
byte[] data = encoding.GetBytes(postData); 

var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://localhost:8733/FileShareWebServices/UploadFile"); 
httpWebRequest.ContentType = "application/json; charset=utf-8"; 
httpWebRequest.Method = "POST"; 
httpWebRequest.ContentLength = data.Length; 
httpWebRequest.GetRequestStream(); 

var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); 
using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
{ 
    var result = streamReader.ReadToEnd(); 
} 
+0

我想你需要经过移动的GetResponse关闭流(在StreamReader的using语句之后移动它) – Sparrow

+0

@Sparrow - 这将不起作用,很可能会导致OP代码无法编译。对'GetResponse'的调用用于在'using'块中创建'StreamReader'。 – Tim

回答

0

您发布的代码不写什么,其最有可能是错误的原因的请求流。一旦你的请求流,你应该写它的内容和长度,就像这样:

using (Stream requestStream = httpWebRequest.GetRequestStream) 
{ 
    requestStream.Write(data, 0, data.Length); 
} 

完整的代码应该是这样的:

ASCIIEncoding encoding = new ASCIIEncoding(); 

string postData = "patron=WTM"; 
byte[] data = encoding.GetBytes(postData); 

var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://localhost:8733/FileShareWebServices/UploadFile"); 
httpWebRequest.ContentType = "application/json; charset=utf-8"; 
httpWebRequest.Method = "POST"; 
httpWebRequest.ContentLength = data.Length; 
//httpWebRequest.GetRequestStream(); 
// Code to write data to the stream 
using (Stream requestStream = httpWebRequest.GetRequestStream) 
{ 
    requestStream.Write(data, 0, data.Length); 
} 

var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); 
using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
{ 
    var result = streamReader.ReadToEnd(); 
} 
+0

谢谢。我一直得到这个错误 – user1836442

+0

谢谢我保持这个错误“远程服务器返回错误(404)没有找到 – user1836442

+0

@ user1836442 - 听起来像你有服务或端点的问题。 – Tim