2013-05-14 120 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數據服務? –