将DataSet从WCF服务传递到Silverlight应用程序

时间:2011-08-27 11:12:37

标签: c# .net wcf silverlight silverlight-4.0

我有一个大约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节点属性的类并创建一个列表,因为我的select查询是标准库,因此在传递sql

后在客户端生成

那么如何在XML中传递数据类型,还是有其他方法将数据从WCF服务传递到Silverlight应用程序?

2 个答案:

答案 0 :(得分:2)

服务应该将序列化为对象或对象数组的强类型对象返回到SOAP,POX(普通旧xml rest)或json(javascript对象表示法)。如果使用REST,WCF可以简单地通过使用DataContract属性归属对象来返回XML或JSON格式。

DataSets(或DataReaders)从数据库返回。服务提供了对存储机制的抽象,可能随时间而变化。

通过传回序列化对象,silverlight(或任何其他客户端)可以将它们反序列化为更容易处理的对象。

另外,关于不传回20K行的评论。找到分页数据的方法(以块为单位请求)。

搜索REST和WCF或Web服务和WCF。

希望有所帮助。

答案 1 :(得分:0)