查询和WCF服务的最佳实践

时间:2009-03-12 20:15:58

标签: sql wcf

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

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

我的困境是,对于某些用户来说,表格相对较小并将其发送到客户端可能不是什么大问题,但是其他用户确实有相当多的行会返回(超过15k)

感谢你带来的任何见解。

4 个答案:

答案 0 :(得分:3)

您可以使您的服务实现某种分页,并允许客户端请求他们想要的记录数(通常是起始索引和计数,或类似的东西)。您可以将页面大小设置为特定限制,这样您就不必为巨大的请求提供服务。

使用类似的东西,您应该能够在正在进行的呼叫数量与每个请求中提供的数据大小之间找到一个很好的平衡。

答案 1 :(得分:1)

您偶然发现的主题是granularity service-oriented architecture上热烈讨论的主题mystic mammal being discussed by blind men。 SOA就像"best practice",但这不是重点。

趋势的{{3}}是粗粒度服务,偏离面向对象。将您的服务视为文档交换,您可以在其中输入完成任务所需的一切。

正如Andy White所说,如果数据太大,你需要某种过滤或分页。

答案 2 :(得分:0)

这听起来像网络延迟是个问题。如果您有100个产品并且(比方说)0.2s往返时间,则加载所有数据的时间为20秒。尽可能减少您的服务调用,并在必要时将数据重新映射到客户端中更合适的结构。

编辑:如果在您的情况下可能,另一个想法是压缩客户端和服务之间的数据。看看this forum post。如果你推动大量的XML,你会看到很大的收获。

答案 3 :(得分:0)

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

我觉得在客户端操纵数据可能很棘手,因为有很多变量 - 浏览器,操作系统,计算能力。您可以控制服务器,因此尽可能利用您控制的内容。

祝你好运。