2011-11-30 3 views
0

C#으로 작성된 REST 서비스를 매개 변수로 읽고 값을 반환 할 수 있지만 XML에 충분한 수준이 없습니다.REST 서비스의 응답 형식 제어

이 반환하는 순간

:

<topNode> 
    <item1>1</item1> 
    <item2>2</item2> 
    <item3>3</item3> 
</topNode> 

하지만 정말 필요한 것은입니다 :

<topNode> 
    <secondNode> 
     <item1>1</item1> 
     <item2>2</item2> 
     <item3>3</item3> 
    </secondNode> 
</topNode> 

나는 내가 무엇을 할 필요하면 응답 데이터 계약을 개정이라고 생각하지만, 난 확실하지. 현재 그것은과 같이 기록 :

[DataContract(Namespace = "http://example.com/myNamespace")] 
public class dataResponse 
{   
    [DataMember] 
    public string item1 { get; set; } 

    [DataMember] 
    public string item2 { get; set; } 

    [DataMember] 
    public string item3 { get; set; } 
} 

나는 또한 오류가 내가 이상적으로 나 자신을 포맷 할 수있는 XML 문서를 반환하고 싶습니다 발생하면 다른 요소 이름으로 XML을 반환해야한다.

어떤 도움/포인터

을 감상 할 수있다
+0

잠깐 - 현재 반환되는 것과 얻을 수있는 것의 차이점은 무엇입니까? 내가 뭔가를 놓치고있어 ... –

+0

두 번째 수준으로 시작하는 것을 잊었다. 이제는 달라 보일 것입니다. – RobP

답변

1

당신에게 클라이언트에 반환되는 것을보다 효율적으로 관리주는 WCF 방법 3 특별한 반환 형식이 있습니다

System.ServiceModel.Channels.Message 
Stream 
byte[] 

스트림과 바이트 배열 Stream 또는 배열의 데이터를 클라이언트에 반환하기 만하면됩니다. 메시지 객체의 경우 Message 객체에서 정적 CreateMessage 오버로드 중 하나를 사용하여 반환 할 인스턴스를 생성해야합니다. 이러한 반환 유형 중 하나를 사용하면 반환되는 XML을 만들어야하지만 여기서는 찾고있는 것으로 생각됩니다. 예를 들어 다음과 같이 할 수 있습니다.

[ServiceContract] 
public interface: IMyContract 
{ 
    [OperationContract] 
    [WebInvoke(Method = "GET", UriTemplate = "getXml")] 
    Stream ReturnAnyXml(); 
} 

public class MyService : IMyContract 
{ 
    public Stream ReturnAnyXml() 
    { 
     WebOperationContext CurrentWebContext = WebOperationContext.Current; 
     if (CurrentWebContext != null) 
     { 
      CurrentWebContext.OutgoingResponse.ContentType = "text/xml";  
      String AnyXml = "<tag></tag>"; 
      return new MemoryStream(Encoding.UTF8.GetBytes(AnyXml)); 
     } 
    }  
} 
+0

인터넷에서 보면 일반 XML이 아닌 SOAP이 반환 될 것입니다. 그게 맞습니까? 아니면 잘못된 길로 갔습니까? – RobP

+0

어떤 바인딩을 사용하고 있으며 전체 서비스 계약은 어떻게 생겼습니까? 당신이 Rest Service라고 했으므로 WebGet 또는 WebInvoke 메서드를 사용하고 있다고 가정합니다. – user957902

+0

답변을 명확하게하기 위해 예제를 추가했습니다 – user957902