0

创建了一个 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 属性添加到数据合同中,但它没有改变任何东西。

4

1 回答 1

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 数据服务可能不是您想要的。

于 2013-05-14T20:21:10.083 回答