2010-01-20 3 views
1

내가하려고하는 일은 겉으로보기에 단순하다. 요청 본문을 통해 POX를 보내고 WCF 서비스에서 처리하고 201 상태 코드를 반환한다. 내 ServiceContract에서 다음 메서드를 정의했습니다.WCF ReSTful 서비스에서 POST 또는 PUT 요청의 Content-Type이 'application/x-www-form-urlencoded'여야합니까?

[WebInvoke(Method = "PUT", UriTemplate = "/content/add", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Xml, RequestFormat=WebMessageFormat.Xml)] 
    [OperationContract] 
    Stream AddContent(Stream input); 

여기서 동사는 중요하지 않습니다. 나는 'PUT'을 'POST'로 쉽게 바꿀 수 있었고 같은 결과를 얻었습니다. 작은 결과의 무엇이 방법이 실제로 수행

public Stream AddContent(Stream input) 
    { 
     WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.Created; 
    } 

내가 절차 모든 코드를 생략했기 때문에 다음과 같이 위의 방법의 구현입니다. 이 기능을 테스트하기 위해 내가 피들러를 해고 다음과 같은 요청을 발행 :

User-Agent: Fiddler 
Host: myhost.com 
Content-Length: 771 
Content-Type: text/xml && application/xml; charset: utf8 
<xmlDataGoesHere></xmlDataGoesHere> 

콘텐츠 유형에 대한 제공된 값이, 나도 알아, 난 그냥 설명하기 위해 그것을 사용하고 잘못된 내가 시도 컨텐츠 유형의. Fiddler에서 'Execute'를 클릭하면 내 서비스의 응답 코드가 400 Bad Request가됩니다. 내 서비스 방법이 실제로이 세 번째 상황에서 타격을 입지 않는다는 사실에 주목할 필요가 있습니다. 요청은 심지어 도착하기 전에 죽습니다. 나는 상태 코드 내 서비스에서 반환 지금 피들러 요청이 만든 201 실행하면

Content-Type: application/x-www-form-urlencoded 

: 그래서 제거의 읽기 및 프로세스의 풍부한 양 후 나는에 콘텐츠 형식을 변경했습니다. URLEncoded 이외에 Content-Type을 설정할 수없는 이유는 무엇입니까? ServiceContract에서 BodyStyle 및 RequestFormat 속성을 조정하려고했지만 결과에 아무런 영향도 미치지 않았습니다. 누가 이런 일이 일어나고 있는지 알 수 있습니까?

답변

0

를 살펴 보자. 나는 그 솔루션으로 이끄는 http://blogs.msdn.com/carlosfigueira/에 게시 된 'WCF "Raw"프로그래밍 모델 - 임의의 데이터 수신 "을 발견했습니다. 여기 해결책은 블로그가 지적한대로 항상 원시 인코더를 반환하는 내 customBinding을 만드는 것이 었습니다. 모든 도움에 감사드립니다.

0

저는이 문제가 XML을 WebHttpBinding으로 보낼 때 XML을 보내고이를 deserialize하려고 시도한다는 사실과 관련이 있다고 생각합니다. 서명이 스트림을 기대한다는 사실을 무시합니다. 해결 방법이 있지만 지금은 링크를 찾을 수 없습니다. 내가 그들을 발견하면 나는 그 소식을 업데이트 할 것이다.

내가이 알아 낸 나는 데 문제가 "디자인"입니다 확인이 http://wcfrestcontrib.codeplex.com/

+0

답장을 보내 주셔서 감사합니다. 하지만 여기에 설명 된 POX 포맷터를 사용하는 경우에도 http://wcfrestcontrib.codeplex.com/wikipage?title=De%2fserialization%20Overview&referringTitle=Home을 사용하면 content-type으로 text/xml을 전달할 수 없습니다. 더 나아가 그것은 또한 내가 application/x-www-form-urlencoded로 전달하는 것을 막는다. 두 요청 모두 400 개의 오류가 발생합니다! – dparsons

관련 문제