2011-10-11 75 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”,这样你的客户端就能知道它正在接收的数据包会发生什么。就像,已经序列化了哪种类型,等等。