【问题标题】:WCF - Is that good to use "DataSet" for transferring data through NetTcpBindingWCF - 使用“DataSet”通过 NetTcpBinding 传输数据好吗
【发布时间】:2012-08-01 04:23:04
【问题描述】:

服务合同之一将巨大的DataSet 传递给客户端。我正在使用BufferedTranfer 模式。

在极少数情况下,我需要发送更多数据,因此我很困惑将 TransportMode 更改为 Streamed。

使用"DataSet" 通过NetTcpBinding 传输数据是一种好习惯吗?

DataSets 的任何替代品?

【问题讨论】:

  • 不,这不是一个好习惯。 DataSet 有大量开销,也需要序列化和传输——这不是你想要的。您应该改用业务对象和/或业务对象的集合(列表)。
  • DataSet(和 DataTable)很难使用——它们代表关系模型(行和列),在 .NET 应用程序中不能很好地工作。它们不提供任何类型安全性,它们不提供任何可通过智能感知发现的属性——您只需要知道它们的内部结构(存在哪些列、它们的含义以及它们保存的数据)。数据集非常混乱且使用起来不方便。尤其是在执行 WCF 时 - 停止使用 DataSet! - 改用 真实 .NET 对象 - 更易于使用、类型安全、可发现!
  • 谢谢!好的...最好的替代选择是什么? List 或 .net 中的任何其他数据结构,如 Dictionary 或 ... ?
  • 是的,List<Employee> 会很好用。
  • 数据集可以是强类型的——你可以提前定义它们。您甚至可以通过编程方式开发它们,直到结构适合您,然后将架构导出到您的项目中,然后可以在完全类型安全的版本中访问它。

标签: c# wcf memory-management dataset buffer


【解决方案1】:

请不要从 WCF 服务返回数据集。

有关原因的信息,请参阅:Returning DataSets from WebServices is the Spawn of Satan and Represents All That Is Truly Evil in the World,

【讨论】:

  • +1 我正在寻找那个链接 - 总结得非常好!
【解决方案2】:

在 3 层应用程序中,我们确实从 WCF 服务层返回数据集,成功且不会影响性能(太多)。原因是:我们的 SQL 数据库实体可以随时通过元数据进行更改。客户端可以请求实体的元数据信息(列、类型、大小、可为空等)。

对服务的请求命名实体并检索元数据中指定的列的当前设置作为 DataSet。这提供了完全的灵活性,这是硬编码对象模型所不具备的。

【讨论】:

    【解决方案3】:

    在跨平台/网络发送数据之前,出于安全原因,建议将它们序列化甚至加密为某种格式,而 XML 似乎最有希望用于大块数据。我听说效果更好,但我从来没有亲自尝试过。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-29
      • 1970-01-01
      • 2010-09-11
      • 2011-09-22
      • 1970-01-01
      相关资源
      最近更新 更多