2011-05-13 54 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