2013-01-21 3 views
0

클라이언트를 통해 복잡한 데이터를 받아야하는 WCF REST 서비스를 수행하고 있습니다. GET 메서드를 통해 복잡한 데이터를 전달할 수 없다는 것을 알고 있으므로 POST를 사용하여 보내고 있습니다. 내가 호출 할 때복잡한 데이터를 REST WCF POST 메서드로 전달

나는

[WebInvoke (UriTemplate="/test/item", Method="POST", 
     RequestFormat=WebMessageFormat.Json, 
     ResponseFormat=WebMessageFormat.Json, 
     BodyStyle=WebMessageBodyStyle.Wrapped)] 
    [OperationContract] 
    string TestMethod(InItem item); 

...이 같은 방법 정의가 그리고 닷넷 콘솔 클라이언트와 같이 소비하기 위해 노력하고있어 ...

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://myIP:port/test/item"); 
request.Credentials = CredentialCache.DefaultCredentials; 
request.Method = "POST"; 

InItem item = new InItem() 
{ 
    Quantity = 2, 
    BougthQuantity = 2, 
    Code = "9998", 
    Date = DataTime.Now 
}; 

string itemToSend = JsonConvert.SerializeObject(item); 
byte[] byteData = Encoding.UTF8.GetBytes(itemToSend); 
request.ContentLength = byteData.Length; 
request.ContentType = "application/json;"; 

Stream stream = request.GetRequestStream(); 
stream.Write(byteData, 0, byteData.Length); 
stream.Close(); 

WebResponse response = request.GetResponse(); 
stream = response.GetResponseStream(); 

을하지만, 서비스 메소드 'TestMethod'의 'item'매개 변수는 항상 null입니다. 내가 놓친 것이 있습니까? 아니면 내가 뭘 잘못하고 있습니까? 사전에

감사합니다 ...

귀하의 답변
+0

Pe rhaps이 JSON 직렬화하고 다음 요청 스트림에 스틱, 실제로 항목을 그냥 익명 JSON 개체를 전달하는 아니에요. 랩 래핑하기 때문에 : itemToSend = "{item :"+ JsonConvert.SerializeObject (item) + "}"; 나는 완전히 틀릴 수 있었다 :() –

+0

이들은 모두 InItem을위한 동일한 버전의 라이브러리를 사용하고 있습니까? –

+0

Serializable 특성으로 표시된 InItem도 있습니까? –

답변

0

감사합니다 모두, 난 그냥 실수는, 우선 무엇인지 깨닫게 ... 또는 물론 우리는 문

"{\"item\":"+serialized object + "}" 

를 사용할 수 있지만 그건 어질러지면 BodyStyle을 Bare로 바꿀 수 있습니다. jsonSerializer가 Newtonsoft를 사용 이후

다음 ... I 프로젝트를 통해 엔티티 주 이후 동일한 라이브러리를 이용하고, 또한 I 엔티티에 ContractSerializer인가

실수는 "날짜 시간"파라미터의 직렬화에 있었다

그래서, 난 그냥 문자열을 날짜 시간 변경 00 (피들러에 표시)와 그것을 잘 작동 : 29 : 41.2211548-06 시리얼 라이저와 DataContractJsonSerializer는 2013-01-21T14 = 이런 종류의

날짜의 형식을 사용합니다. ..

관련 문제