【问题标题】:Best practice for queries and WCF Service查询和 WCF 服务的最佳实践
【发布时间】:2009-03-28 13:40:07
【问题描述】:

以下场景的最佳做法是什么:

有一个网格将被填充,并且必须根据每一行进行更改。例如,有一个充满产品的网格,然后根据每个产品,其中一个列将被动态填充。是从服务返回所有 productdetail 表并在客户端查询它,还是在服务上有一个只返回所需数据的方法更好?后者意味着如果网格上有 n 个产品,则该服务方法将有 n 个请求。

我的困境是,对于某些用户来说,该表相对较小,将其发送给客户端可能没什么大不了的,但其他用户确实有相当多的行要返回(超过 15k) .

感谢您提供的任何见解。

【问题讨论】:

    标签: sql wcf


    【解决方案1】:

    您可以让您的服务实现某种分页,并允许客户端请求他们想要的记录数(通常是起始索引和计数,或类似的东西)。您可以将页面大小限制在某个限制范围内,这样您最终就不必处理庞大的请求。

    使用类似的方法,您应该能够在调用次数与每个请求中提供的数据大小之间找到一个很好的平衡点。

    【讨论】:

      【解决方案2】:

      您偶然发现的话题是granularityservice-oriented architecture 上热烈讨论的话题。 SOA 就像mystic mammal being discussed by blind men,但这并不是重点。

      趋势的"best practice"是粗粒度服务,背离了面向对象。将您的服务视为文件交换,您可以在其中放入完成工作所需的一切。

      正如 Andy White 所建议的,如果数据太大,您需要某种过滤或分页。

      【讨论】:

        【解决方案3】:

        我建议在服务器上创建某种 ViewModel 来为客户端定制数据。这类似于您的第二个选项;但是,它不是逐行完成的。这是服务器端的批处理操作,用于准备列,因此视图不需要任何特殊逻辑。

        我觉得在客户端操作数据可能会很棘手,因为有很多变量——浏览器、操作系统、计算能力。你控制服务器,所以尽可能利用你控制的东西。

        祝你好运。

        【讨论】:

          【解决方案4】:

          听起来网络延迟是这里的问题。如果您有 100 种产品和(例如)0.2 秒的往返时间,那么加载所有数据需要 20 秒。尽可能减少服务调用,并在必要时将数据重新映射到客户端中更合适的结构。

          编辑:如果可能的话,另一个想法是压缩客户端和服务之间的数据。看看this forum post。如果您推动大量 XML,您将看到巨大的收益。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-09-19
            • 1970-01-01
            • 2011-01-22
            • 1970-01-01
            • 1970-01-01
            • 2014-03-20
            • 2016-03-27
            • 1970-01-01
            相关资源
            最近更新 更多