Web服务/ wcf服务,返回数据集是否更好?

因此,从我所看到的有关服务的内容来看,自定义对象似乎是在编写服务以返回数据时的方法。 如果我正在编写将用于1)填充数据库的服务,或者2)为网站提供信息,那么返回数据集/数据表是否有用,而不是具有所有这些的自定义对象列表信息?

谢谢

我认为,假设你“拥有”两端,通过网络发送DataSet的最大问题是DataSet带来的绝对“权重” – 它具有关系function等,它远远超过传输数据。 简单的对象集合应该更加轻量级。

如果您没有“拥有”两端,或者可能有其他客户使用您的服务,那么DataSet就是一个互操作性的噩梦。

如果您不关心这些问题中的任何一个,并且您认为对象集合太多“工作”(例如,如果您只是将其转换回另一端的DataSet)那那就是您的通话。

这里有一篇很好的文章。

我唯一一次通过WCF返回DataTable / DataSet是我在某些地方提前知道模式的原因,或者它们根本没有任何好处。 99.99%的时间我将使用常规DTO类,因为这样可以很好地融合性能,简单性(调试)和互操作性。

自从3.0 CTP以来我一直在使用WCF …我通过WCF使用了DataTable只有几次……我觉得它有点脏,但对于有问题的情况,根本就没有返回 -努力做到这一点的投资。

请注意,非.NET客户端很难使用它们。

像这样的问题很难解决,但一般来说,你不想从Web服务返回数据集。 Insead尝试返回业务对象。 对于商务人士而言,像Order类这样的概念是有意义的。 这样做的原因是,通常您不希望将Web服务客户端与提供服务的应用程序的实现细节耦合。 客户关心的是订单,而不是关于如何在数据库中构建这些订单的订单。 这将产生紧密耦合,这与web服务的精神相反。 其次,如果使用web服务的客户端不是.net客户端,那么他们最终会得到一个非常讨厌的XML来创建/解析,以便读取/写入在他们的平台上不是数据类型的数据集。

自定义对象使您的客户更容易。 DataSet / DataTables让您更轻松。

我认为你应该根据自己的想法做出决定。

由于以下原因,我不会将数据集用于Web服务(它们可能与您的情况相关或不相关):

  • 数据集是MS技术,如果要从Java客户端调用Web服务会发生什么?
  • 您无法控制客户端所做的更改。 您只是回过头来保存到数据库的更改列表。
  • 数据集包含许多可能不需要的信息,从而导致性能问题。

尽管ORM很受欢迎,但我还是返回了数据集。 返回自定义对象意味着您需要复制数据集类中已存在的function。 数据集在内存中表示基于表的数据方面做得非常出色。

我对那些没有意识到拥有一个返回DataSet的Web服务是多么糟糕的决定的人数感到非常震惊。

DataSet是一种自定义.NET类型。 Web服务的重点在于可以通过任何平台上的任何语言调用它。

简而言之,如果Web服务返回DataSet,那么它就不是Web服务!