2011-11-30 14 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を返す必要があります。

System.ServiceModel.Channels.Message 
Stream 
byte[] 

ストリームとバイト配列:

すべてのヘルプ/ポインタは、あなたのクライアントに戻されているものをより細かく制御WCFメソッドから3つの特殊な戻り値の型があります

+0

待機時間 - 現在の状況と必要なものの違いは何ですか?私は何かが欠けている... –

+0

私は2番目のレベルを追加するのを忘れてしまった。今異なっているはずです – RobP

答えて

1

をいただければ幸いですStreamまたは配列内のデータをクライアントに返すだけです。メッセージオブジェクトでは、Messageオブジェクト内の静的なCreateMessageオーバーロードの1つを使用して、返すインスタンスを作成する必要があります。これらの戻り値の型の1つを使用して、自分で返される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サービスだと言ったので、私はあなたがWebGetまたはWebInvokeのいずれかの方法を使用していると推測します。 – user957902

+0

答えを明確にするための例を追加 – user957902

関連する問題