【问题标题】:Pass DataSet From WCF Service to Silverlight application将数据集从 WCF 服务传递到 Silverlight 应用程序
【发布时间】:2011-08-27 11:12:37
【问题描述】:

我有一个大约 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 应用程序?

【问题讨论】:

  • 简单:不要一次传回 20'000 行!如果您以可管理的块回传数据,例如一次 100 行,您的大小将降至 40K ......
  • 我想说的另一点:你不应该创建一个带有“匿名”对象的字典——那样的话,你永远不会知道你在处理什么。创建一个自定义类,例如CustomerPerson 或任何你正在处理的东西,然后创建一个 IEnumerable&lt;Customer&gt;IEnumerable&lt;Person&gt; - 这样,你会得到一个已知对象类的列表 - 你 知道你在处理什么。
  • 也许看看 OData?这是当您在 Google 搜索“从 WCF 到 Silverlight 的数据”时出现的第一件事。 MSDN - msdn.microsoft.com/en-us/library/cc838234(v=vs.95).aspx OData 网站 - odata.org/developers/protocols

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


【解决方案1】:

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

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

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

另外,我支持关于不传回 20K 行的评论。寻找分页数据的方法(分块请求)。

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

希望对您有所帮助。

【讨论】:

    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-08
      相关资源
      最近更新 更多