2013-05-14 84 views
0

创建了一个WCF数据服务并获得了一切正常工作,但xml没有按照我需要的方式格式化,我似乎无法弄清楚如何摆脱所有额外的东西。我所拥有的是: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属性数据合同,但它并没有改变任何东西。

回答

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数据服务可能不会成为你正在寻找的东西。

+0

所以没有办法从WCF控制有效载荷本身的格式?我需要的是上面的格式,以便它可以很容易地自动加载到另一端的类中。目前的XML正在使这个噩梦。必须有某种方法来覆盖此行为并创建所需的输出。我不需要在visual studio中引用它,或者让浏览器显示它。我需要能够正确地格式化输出而不需要额外的数据。 – Beowulf4756

+0

我不知道在WCF数据服务中做到这一点的直接方式(但只有WCF可能会有,但我对WCF不太了解)。我可以问你为什么使用WCF数据服务? –