2011-10-11 253 views
2

我正在使用WCF返回從Linq從SQL Server返回的複雜對象的列表。WCF服務大Linq響應

我想返回約16個屬性的對象列表和2個其他複雜類型的引用(每個約8個屬性)。

我在小提琴手中看到每個對象返回(當序列化爲XML時)大約是5KB,當我嘗試返回完整列表(900項)時,大約是3MB!

這是正常的嗎?有沒有其他方法可以將數據序列化爲輕量級格式?

在此先感謝!

+0

有多種序列化數據的方式,例如CSV,JSON,但這取決於您需要提供給服務使用者的內容?你能減少你製作的清單的大小嗎? 900條記錄似乎很多。 – Paddy

+0

是的,我認爲我可以將頁面添加到結果中,但我需要在一頁中加載完整的數據網格8-) – zapico

+0

嗯,它可能只是我,但我可以想到幾次使用100+一排排網格是一個好主意...... – Paddy

回答

4

查找到NetTcpBinding如果這是可能對你來說,這將減少網絡流量非常相比,XML序列化

+0

請問NetTcpBinding讓我像往常一樣使用這個服務? (我的意思是客戶端應該創建所有類的副本......) – zapico

+1

@zapico:將綁定更改爲Net TCP應該對服務沒有影響。你應該能夠改變服務器和客戶端的配置文件來使用這個綁定,並且它們都可以工作!您不需要重新引用服務或重新生成任何代理類。 –

+0

謝謝!我會試試看。 – zapico

3

XML非常冗長,而且大小並沒有真正讓我感到吃驚(把你的列表的大小成考慮 - 如果你問我,900件物品太多了)。

如果你需要「打包」你的數據,我建議序列化你的對象到JSON,因爲這會消除很多冗長。有一個內置的JSON Serialization mechanism,所以你應該能夠開始非常快。我唯一遇到的問題是DateTime字段,它有時會與內置的JSON序列化程序錯誤,但有解決方法。

但是這也意味着需要在兩端完成一些工作。 Serverside,如果您願意,您需要將您的實體轉換爲某種傳輸實體或DTO。在客戶端,您無法立即與這些數據一起工作,但需要先將數據反序列化,然後從那裏重新構建數據模型。

你想要在發送的對象中打包一個「DTO Info」,這樣你的客戶端就能知道它正在接收的數據包會發生什麼。就像,已經序列化了哪種類型,等等。