将数据集从WCF服务传递到Silverlight应用程序
本文关键字:Silverlight 应用程序 服务 数据集 WCF | 更新日期: 2023-09-27 18:06:53
我有一个大约20,000行的数据集,我用以下代码将其转换为IEnumerable<Dictionary<string, object>>
:
IEnumerable<Dictionary<string, object>> IEnu = ds.Tables[0]
.AsEnumerable()
.Select(r => ds.Tables[0]
.Columns.Cast<DataColumn>().Select(c => new {
Column = c.ColumnName,
Value = r[c]
}).ToDictionary(
i => i.Column,
i => i.Value != DBNull.Value ? i.Value : null
)
);
但是IENU
对象的大小太大了(大约7到8 MB)。这是通过服务传递的一个非常大的大小。另一种选择是生成数据集的XML(大约1到2 MB)但仍然有一个问题,我不识别XML节点数据的数据类型,我也没有创建任何类包含XML节点的属性并创建一个列表因为我的选择查询是标准基础所以在客户端生成后通过sql
那么我如何在XML中传递数据类型,或者是否有其他方法将数据从WCF服务传递到Silverlight应用程序?
服务应该返回强类型对象,这些对象被序列化为SOAP、POX(普通的旧xml rest)或json (javascript对象表示法)中的对象或对象数组。如果使用REST, WCF可以简单地通过赋予对象DataContract属性来返回XML或JSON格式。
数据集(或数据阅读器)从数据库返回。服务为存储机制提供了一种抽象,这种抽象可能会随时间变化。
通过返回序列化的对象,silverlight(或任何其他客户端)可以将它们反序列化成更容易处理的对象。
另外,我支持关于不传递20K行的评论。想办法分页你的数据(请求块)。
搜索REST和WCF或Web服务和WCF。
希望对你有帮助。
这可能是一个有趣的帖子http://weblogs.asp.net/sweinstein/archive/2009/01/03/creating-high-performance-wcf-services.aspx