2011-09-20 4 views
1

방금 ​​첫 WCF REST 서비스를 만들었습니다. 나는 그것이 JSON을 반환하기를 원했기 때문에 나는 응답 형식을 구체화했다. 처음에는 항상 SOAP을 반환했기 때문에 좌절감을 느꼈고 이유를 모르지만 블로거가 피들러를 사용하고있는 것을 보았습니다. 그래서 시도해보고 나서 JSON 응답을 받았습니다. 다음요청에 따라 SOAP 또는 JSON을 반환하는 시점을 WCF가 결정하는 방법은 무엇입니까?

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 

하지만이 헤더를 사용하여 요청을 정교하게하려고 :

Accept: application/json,text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 

을하지만하지 않았다

나는 피들러이 HTTP 헤더를 전송하지 않기 때문에 이유라고 생각합니다 작업. WCF는 JSON이나 SOAP을 언제 사용할 것인가를 어떻게 결정합니까?

JSON을 항상 강제로 반환하는 방법이 있습니까?

서비스를 소비 할 때 SOAP가 아닌 JSON이 반환되는지 확인하고 싶습니다.

감사합니다.

업데이트 : 샘플 코드 :

[ServiceContract] 
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] 
public class Service1 
{ 
    [WebGet(UriTemplate = "", ResponseFormat = WebMessageFormat.Json, RequestFormat= WebMessageFormat.Json)] 
    public List<SampleItem> GetCollection() 
    { 
     // TODO: Replace the current implementation to return a collection of SampleItem instances 
     return new List<SampleItem>() { new SampleItem() { Id = 1, StringValue = "Hello" } }; 
    } 

    [WebInvoke(UriTemplate = "", Method = "POST")] 
    public SampleItem Create(SampleItem instance) 
    { 
     // TODO: Add the new instance of SampleItem to the collection 
     throw new NotImplementedException(); 
    } 

    [WebGet(UriTemplate = "{id}", ResponseFormat = WebMessageFormat.Json)] 
    public SampleItem Get(string id) 
    { 
     // TODO: Return the instance of SampleItem with the given id 
     return new SampleItem() { Id = Int32.Parse(id), StringValue = "Hello" }; 
    } 
} 
+1

당신은 SOAP을 반환 할 수는 -이 아닌 ** 데이터 형식 ** –

답변

2

나는이

<endpointBehaviors> 
    <behavior name="jsonEndpoint"> 
    <webHttp defaultOutgoingResponseFormat="Json" /> 
    </behavior> 
</endpointBehaviors> 

같은 엔드 포인트 동작을 가지고 그들이 경우 서로 다른 출력을 생성 할 수 있습니다 다른 엔드 포인트를 통해 액세스 할 수 있습니다.

아직 확실하지 않은 것은 WCF가 생성하는 두 가지 Json 스타일에 관한 것입니다. enableWebScript를 사용하는 경우이 옵션은 { "d": {...}} Json 형식을 생성하며 defaultOutgoingResponseFormat 옵션을 Json으로 설정하면 d- 객체가 없지만 Json 만있을 것입니다.

1

내가 정확히 무엇을하고 있는지 이해하는 코드를 볼 필요가있다. 그러나 여기에서 빠른 수표. 다음 특성을 서비스 정의에 적용 했습니까? 당신이 당신의 작업 계약을 터치하지 않아도 엔드 포인트 동작으로이를 구성하는 경우

[System.ServiceModel.Web.WebGet(ResponseFormat = System.ServiceModel.Web.WebMessageFormat.Json)]

+0

(JSON 또는 XML처럼) 내가 게시물을 업데이트 한 - SOAP은 ** 프로토콜 **이 호출이다. WCF REST 템플릿과 함께 제공되는 샘플 코드는 다음과 같습니다. p – vtortola