WCF REST for XML选项

时间:2012-02-08 23:56:16

标签: xml wcf rest

我正在制作一个WCF REST服务,在其中我返回一些XML。

我有一个方法

的界面
 [OperationContract]
 [WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Xml, UriTemplate = "?listcameras", ResponseFormat = WebMessageFormat.Xml)]
 List<TItem> ListItems();

TITem

 [DataContract(Name = "SomeContract", Namespace = "")]
 public class TITem
 {
     [DataMember]
     public string Member1
     {
         get;
         set;
     }

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

调用此方法时,我会从HTTPWebRequest返回XML格式, XML格式的TITem类型列表。注意上面我要做Namespace =“” 否则我似乎无法使用XDocument。 Descendants方法并获得匹配的名称。

如果这是从某些WCF服务取回XML的最佳方法,我只想要一些意见。 我确实希望我的WCF服务是可扩展的,并且可能在将来返回的不仅仅是XML

1 个答案:

答案 0 :(得分:0)

使用名称为string.Empty的命名空间没有问题。使用命名空间的全部意义在于将其与具有相同DataContract名称但具有不同DataContract命名空间的其他数据协定区分开来。这一点尤为重要,因为DataContract名称/名称空间绝不一定与从CLR类型表示派生的名称/名称空间相关。

换句话说,如果您确定在应用程序的不同命名空间中不会有其他类型具有相同DataContract名称 - 如果您认为自己不会在未来因为版本控制注意事项 - 您可以继续使用string.Empty作为数据协定命名空间。

除了操作属性(WebGet / WebInvoke)之外,您还需要考虑现在使用的绑定和行为以及将来使用的绑定和行为。例如,现在,您可能正在使用WebHttpBinding和WebHttpBehavior。您可以控制WebHttpBinding级别支持的数据格式 - XML,JSON,Binary等。您还可以控制从WebHttpBehavior返回的XML类型 - XML可以是“裸”,也可以是“包裹“,有额外的嵌套。最后,您甚至可以插入自己的DataContractSerializerOperationBehavior,以插入您自己的全新序列化程序或数据格式,如果您这样选择(但如果您这样做,则需要实现自己的序列化程序,格式化程序,行为,绑定,编码器等,就像它已经为SOAP和JSON所做的那样。)

希望这有帮助!