我应该从Web服务返回强类型的数据集吗?
我是否应该从Web服务公开强类型数据集并将其直接绑定到客户端?还是asmx Web服务有更明智的方法?我正在执行CRUD操作(创建,读取,更新,删除)。
我发现使用数据集令人沮丧并且难以使用,例如当插入到表中时。仅插入一条记录或者仅从数据集中的特定表中获取一条记录时,来回运送整个数据集似乎并不合逻辑。
有没有更好的办法?
我是否应该转换为对象并通过Web服务使用对象?到处进行转换以使对象四处传递可能同样乏味吗?
解决方案
这取决于互操作性要求。尽管实际上几乎可以从任何环境中处理DataSet XML,但它可能会变得毫无用处。如果我们不进行互操作,我绝对会建议我们使用类型化的数据集路由,因为从Cand"使用即可"它非常简单。
请注意,数据集特定于.NET。如果要使API具有互操作性,则应坚持使用基本数据类型和构造(否则,这种情况对于非.NET开发人员可能会很麻烦)。
然后,Web服务并非旨在一次传递大型对象。如果数据集包含数百KB,那么我们最终可能会遇到客户端或者服务器端HTTP超时(考虑默认设置)。
对于CRUD操作,我只建议直接通过WS公开每个操作。
我同意乔安妮斯(Joannes ...)坚持使用对象和要公开的操作类型的特定方法。
我会说选择对象,DataSet有点混乱。对象可以看起来更整洁,当然也可以调试。
不过,在使用抽象类型时要小心,因为如果我们有基于抽象类/接口的集合,那么进行序列化可能会有些麻烦。过去我对此有疑问,但是找到了解决方案。
我在数据集方面取得了很大的成功(服务器使用并返回一个强类型的数据集,而客户端将其用作标准数据集)。像Tomer警告一样,我无需担心互操作性。
关于更新,发送整个数据集是一个坏主意。 DataSet和DataTable对象上都有一个名为GetChanges()的方法,该方法将返回自调用AcceptChanges()以来的所有编辑。这应该有助于我们降低网络流量。
一些与此主题相关的链接
scott hanselman从WebServices返回数据集是Satan的产物,它代表了世界上所有真正邪恶的事物
Rockford Lhotka关于通过Web服务传递DataSet对象的想法
4guysfromrolla有关我为什么不在ASP.NET应用程序中使用数据集的更多信息