7

我应该从 Web 服务公开强类型数据集并将其直接绑定到客户端吗?还是有更明智的 asmx Web 服务方式?我正在执行 CRUD 操作(创建、读取、更新、删除)。

我发现使用数据集令人沮丧并且难以使用,例如当插入到其中的表中时。当仅插入一条记录或仅从数据集中的特定表中获取一条记录时,来回传送整个数据集似乎不合逻辑。

有没有更好的办法?

我是否应该转换为对象并通过 Web 服务使用对象?到处进行转换以传递对象可能同样乏味?

4

6 回答 6

4

这取决于您的互操作性要求。尽管从几乎任何环境中处理 DataSet XML 都是完全可能的,但它会变得笨拙。如果您不进行互操作,我肯定会推荐类型化的数据集路由,因为它在 C# 中使用起来非常简单并且“可以正常工作”。

于 2008-09-22T18:10:53.990 回答
3

我会说选择对象,DataSet 可能会有点混乱。对象可以看起来更干净,当然也可以调试。

使用抽象类型时要小心,因为如果您有基于抽象类/接口的集合,那么序列化它们可能会有点痛苦。过去我遇到过这个问题,但是,我找到了解决方案

于 2008-09-22T18:17:13.443 回答
2

请注意,数据集特定于 .NET。如果您想让您的 API 可互操作,您应该坚持使用基本数据类型和构造(否则,对于非 .NET 开发人员来说,这种情况可能会很麻烦)。

然后,Web 服务的设计目的不是在一次行程中传递大型对象。如果您的数据集包含超过几百 KB,您可能最终会遇到客户端或服务器端 HTTP 超时(考虑默认设置)。

对于 CRUD 操作,我只是建议直接通过 WS 公开每个操作。

于 2008-09-22T18:15:12.123 回答
2

我在 DataSets 方面取得了巨大的成功(服务器使用并返回一个强类型数据集,而客户端将其作为标准数据集使用)。就像 Tomer 警告的那样,我的好处是没有互操作性问题。

关于更新,发送整个数据集是个坏主意。DataSet 和 DataTable 对象都有一个名为 GetChanges() 的方法,它将返回自调用 AcceptChanges() 以来的所有编辑。这应该可以帮助您降低网络流量。

于 2008-09-22T18:20:37.617 回答
1

与此主题相关的一些链接

scott hanselman -从 Web 服务返回数据集是撒旦的产物,代表了世界上真正邪恶的一切

rockford lhotka -关于通过 Web 服务传递 DataSet 对象的思考

4guysfromrolla -更多关于为什么我不在我的 ASP.NET 应用程序中使用数据集

于 2009-02-13T09:42:47.290 回答
0

我同意 Joannes 的观点……坚持使用对象和特定方法来处理您想要公开的操作类型。

于 2008-09-22T18:16:26.037 回答