WCF数据服务自定义XML

时间:2013-05-14 18:45:13

标签: wcf-data-services

创建了一个WCF数据服务并使一切正常工作,但xml没有按照我需要的方式格式化,我似乎无法弄清楚如何摆脱所有额外的东西。我所拥有的是:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<entry xml:base="http://172.1.2.2/Database/DatabaseTables.svc/" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom">
<id>http://172.1.2.2/Database/DatabaseTables.svc/Device('999')</id>
<title type="text"></title>
<updated>2013-05-14T18:17:10Z</updated>
<author>
  <name />
</author>
<link rel="edit" title="Device" href="Device('999')" />
<category term="Model.Device" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
<content type="application/xml">
  <m:properties>
    <d:Device_Code>999</d:Device_Code>
    <d:Short_name>TC2</d:Short_name>
  </m:properties>
 </content>
</entry>

我想要的是:

<Device>
  <Device_Code>999</Device_Code>
  <Short_name>TC2</Short_name>
</Device>

我已经将name属性添加到数据协定中,但它没有改变任何内容。

1 个答案:

答案 0 :(得分:0)

WCF数据服务生成OData,这是一个基于RESTful服务的共同特征构建的统一协议。使用OData意味着使用您的服务的人不需要了解自定义API的特定于服务器的详细信息,以便了解有效负载格式,URI约定和HTTP方法语义。如果他们已经了解OData,并且您的服务生成OData,他们不需要学习任何新内容或编写大量自定义代码。

您要发回的xml未使用其中一种OData有效内容格式进行格式化。这不是问题本身,但您应该知道您将无法使用WCF数据服务客户端(在Visual Studio中称为“添加服务引用”),PowerPivot或任何其他工具和客户端库了解OData。此外,OData xml格式构建在AtomPub之上,这意味着大多数浏览器(和其他Atom读取器)都能以智能方式显示数据。

如果您希望使用自己的格式创建自定义REST API,那么可能还有其他更适合的库和框架。 ASP.NET Web API可能是个不错的选择。我不确定这一点,但我认为Web API也可能使您在生成自定义格式时使用标准的OData URI约定($ filter,$ select等)。

总结一下:如果你想坚持一个通用的标准并且希望能够依靠现有的,经过良好测试的库来使用你的服务,那么OData是很棒的。 WCF数据服务是OData非常可靠和稳定的实现。但是如果你没有使用OData(或者你只是使用它的一部分),那么WCF数据服务可能不会是你想要的。