2013-10-29 3 views
0

예상되는 형식으로 PUT 요청을 WCF로 보내는 데 어려움을 겪고 있습니다. QueryString을 사용하여 GET과 같이 보낼 수 있다고 생각했지만 오류가 다시 발생했습니다. WCF PUT 요청의 올바른 형식은 무엇입니까?

//Put operation 
    [OperationContract] 
    [WebInvoke(UriTemplate = "?tid={transcriptId}&qId={quizId}&cid={choice}&mid={mbox}&status={status}", Method = "PUT", RequestFormat=WebMessageFormat.Json)] 
    vTranscript UpdateTranscript(string transcriptId, string quizId, string choice, string mbox, string status); 

는 또한 XML과 CURL을 사용하여 JSON 파일로 전송했는데,이 파일의 값은 서비스에 의해 포착되지 않은 (값이 null이었다).

[DataContract] 
public class vTranscript 
{ 
    [DataMember] 
    public bool validUser; 
    [DataMember] 
    public bool correctAnswer; 
    [DataMember] 
    public bool recorded; 
    } 

내 vTranscript가하는 있으리라 믿고있어 나는 심지어 시도했지만되지, 나는에 전달하는 매개 변수와 일치해야합니다.

내가 잘못하고있는 것이 확실하지 않습니다. 어떤 제안이라도 대단히 감사하겠습니다. 고맙습니다. (게시 된 이름이 메서드 매개 변수의 이름과 일치해야합니다)

//Put operation 
[OperationContract] 
[WebInvoke(Method = "PUT", RequestFormat=WebMessageFormat.Json)] 
vTranscript UpdateTranscript(string transcriptId, string quizId, string choice, string mbox, string status); 

UriTemplate은 URL 자체에 포함 된 매개 변수를 정의 할 수 있습니다 :

답변

0

가정의 모든 매개 변수는 바로 다음 필요에 게시됩니다.

+0

도움 주셔서 감사합니다. 그게 효과가 있지만, 이제는 "405 Method Not Allowed"가 표시됩니다. 이 오류 메시지에 대한 구글 때 가능한 많은 원인이있는 것 같다. VS2010 내에서 모든 것을 실행 중이므로 계속 볼 수있는 교차 도메인 문제와 관련이 있는지 의심 스럽습니다. – Trebor

+0

PUT 및 DELETE 동사는 기본적으로 비활성화되어 있습니다. 이 스레드 (http://stackoverflow.com/a/10907343/2711582)는이를 활성화하는 방법에 대한 정보를 제공합니다. 클라이언트 측의 해결 방법은 POST를 수행하고 X-HTTP-Method-Override 헤더를 추가하여 실제 동사를 지정하는 것입니다. – wdosanjos

+0

이 작업을 좀 더 수행 한 후에이 문제를 해결할 수있었습니다. 내 JSON을 JSON 배열로 포장하고 있었으며 단순한 JSON 문자열로 포장하지 않았습니다. 도와 줘서 고마워. – Trebor

1

아래와 같이 바디 스타일을 설정해보십시오.

[WebInvoke(Method = "PUT", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)] 
+0

감사합니다. 이것은 또한 도움이되었습니다. – Trebor

관련 문제