2011-05-13 42 views
4

我有一個WCF操作返回顏色列表:返回列表<T>作爲來自WCF服務的XML響應?

public List<Color> GetColors() 
{ 
    List<Color> colors = new List<Color>(); 
    colors.Add(new Color {Name = "Red", Code = 1}); 
    colors.Add(new Color {Name = "Blue", Code = 2}); 

    return colors; 
} 

當我在WCF測試客戶端運行它,它工作得很好,我可以看到的顏色數組,但我實際上喜歡的是如果它返回XML響應,然後我可以將RichTextBox的文本設置爲xml的內容。我怎樣才能做到這一點?

回答

2

如果您希望列表的XML表示返回給客戶端,我的建議是序列化列表並將其作爲字符串返回給客戶端。

這裏有一些代碼可以讓你開始。還沒有測試過,但我認爲你可能很容易改變。

public string GetColorsXmlRepresentation() 
{ 
    var colors = new List<Color>(); 

    colors.Add(new Color {Name = "Red", Code = 1}); 
    colors.Add(new Color {Name = "Blue", Code = 2}); 

    return Serialize<List<Color>>(colors); 
} 


public string Serialize<T>(T instance) 
{ 
    var data = new StringBuilder(); 
    var serializer = new DataContractSerializer(instance.GetType()); 

    using (var writer = XmlWriter.Create(data)) 
    { 
     serializer.WriteObject(writer, instance); 
     writer.Flush(); 

     return data.ToString(); 
    } 
} 

希望它可以幫助

+0

這工作得很好。我讀到關於IDispatchMessageInspector的所有內容是什麼? – Xaisoft 2011-05-13 17:07:05

+0

如果要在消息到達或發送消息之前對消息執行修改,可以使用稱爲消息檢查器的WCF擴展機制。你可以在這裏查看更多信息:http://msdn.microsoft.com/en-us/library/aa717047.aspx – 2011-05-13 17:18:38

+0

如果我不想只返回普通的xml,但我想把它作爲一個soap返回信封? – Xaisoft 2011-05-13 17:30:18

0

您不能在WCF合約中使用開放泛型。 SOAP對泛型沒有任何支持。

+3

WCF!= SOAP。 WCF也可以是REST,JSON或二進制,也可能是其他幾個。 – Jeff 2011-05-13 16:42:20

+0

我不明白你的意思。當我運行Microsoft提供的WCFTest客戶端時,我看到了Formatted選項卡和XML選項卡。我基本上想查看我的結果,就像它們出現在xml選項卡中一樣,但是在我自己的wpf應用程序中。 – Xaisoft 2011-05-13 16:43:01

+0

看起來像他在談論SOAP雖然! – iwayneo 2011-05-13 17:41:49

1

如果您希望WCF服務返回XML,請將其返回XML。如果你想要它返回List<Color>,那麼它應該返回List<Color>

+0

John,如果我想返回SOAP Envelope,是否必須手動構建它?我正在考慮使用XElement來構建xml並返回它。我在正確的軌道上嗎? – Xaisoft 2011-05-13 16:56:07

+0

@ Xai:沒有。 WCF將爲您列出您的「清單」序列號。 – 2011-05-13 19:43:53

+0

@Sergio:這是什麼意見?這是事實。 – 2011-05-16 15:53:05