【问题标题】:Should I return a strongly typed dataset from a webservice?我应该从 Web 服务返回强类型数据集吗?
【发布时间】:2010-09-12 02:26:50
【问题描述】:

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

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

有没有更好的办法?

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

【问题讨论】:

    标签: .net data-binding dataset


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      使用抽象类型时要小心,因为如果您有基于抽象类/接口的集合,那么序列化它们可能会有点麻烦。我过去遇到过这个问题,但是,我found a solution。

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            【解决方案5】:
            【解决方案6】:

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

            【讨论】:

            • 如果您只是发帖表示同意,为什么不直接升级呢?
            • 问得好,脑子坏了。为乔安妮斯道歉并投票 - 完成并完成。
            猜你喜欢
            • 2018-10-02
            • 2012-10-18
            • 2010-09-11
            • 2010-12-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多