2014-03-25 136 views
0

我已經開發了REST WCF服務方法如下:POST請求

[OperationContract] 
    [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml, UriTemplate = "/Details")] 
    DetailData GetDetails(TestData requst); 


[DataContract] 
public class TestData 
{ 
    [DataMember] 
    public string DetailData { get; set; } 
} 

現在我嘗試使用下面的客戶端代碼來調用服務:

ASCIIEncoding encoding = new ASCIIEncoding(); 
    string testXml = "<TestData>" + 
         "<DetailData>" + 
          "4000" + 
         "</DetailData>" + 
        "</TestData>"; 

string postData = testXml.ToString(); 
byte[] data = encoding.GetBytes(postData); 
string url = "http://localhost/WCFRestService.svc/bh/Details"; 
string strResult = string.Empty; 

// declare httpwebrequet wrt url defined above 
HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(url); 
// set method as post 
webrequest.Method = "POST"; 
// set content type 
webrequest.ContentType = "text/xml"; 
// set content length 
webrequest.ContentLength = data.Length; 
// get stream data out of webrequest object 
Stream newStream = webrequest.GetRequestStream(); 
newStream.Write(data, 0, data.Length); 
newStream.Close(); 

//Gets the response 
WebResponse response = webrequest.GetResponse(); 
//Writes the Response 
Stream responseStream = response.GetResponseStream(); 

StreamReader sr = new StreamReader(responseStream); 
string s = sr.ReadToEnd(); 

我收到以下錯誤:

「遠程服務器返回錯誤:(400)錯誤的請求」

我可以成功調用另一種使用「GET」動詞的服務方法。但上面的客戶端代碼使用「POST」動詞調用服務不起作用。我想,我在客戶端代碼中丟失了一些東西。 可能是什麼問題?

回答

0

嘗試改變

WebMessageBodyStyle.WrappedRequest 

WebMessageBodyStyle.Bare