.Net WCF RIA服务:要翻页还是不翻页?以及向下传输管道的数据量

时间:2010-10-13 21:41:54

标签: .net wcf silverlight-4.0 wcf-ria-services

所以我和我的同事讨论了 WCF RIA服务,以及我们在给定请求中发送给客户端的确切数据量。这是设置:

我们正在 Silverlight 中创建报告应用程序,并从 WCF RIA服务中获取数据以填充各种网格和图表。关于如何实现服务,我们有两个不同的想法。有一些警告对做出这个决定很重要。

警告1:“报告”可以是任意数量的表格/图表,但很可能只包含几个。

警告2:数据表的完整大小可能是数千行。

警告3:有些表格将包含50多列(不是我们的想法......)。用户需要能够显示隐藏列,因为老实说,谁可以同时吸收大量数据?

我们有两个不同的想法:

  1. 为每个表格/图表创建Data Contract,为每个表格/图表创建单独的GetTableX()/GetChartX()服务方法。我们将使用域服务,因此可以在服务器上处理过滤/排序/分页,并且只返回一定数量的对象。

    因为“报告”可能包含n个表格/图表,这意味着每次加载n时都会发送Report个请求,并且每个页面上都会发送一个额外请求

    该服务也有些冗长,15份报告(不可避免地会增长),每份报告可能有3-5种方法可能意味着45到75种方法。

    由于用户可以隐藏某些列,并且某些列默认会隐藏,因此可能会有大量数据发送到客户端,而不会查看事件。据我所知,没有办法用DomainService

  2. 来限制
  3. 为每个报告创建一个Report对象,其中包含一组网格/图表,以及每个图表/表格的数据,按照每个报告的通用标准进行过滤。序列化并将报表对象传递回客户端,让Silverlight处理分页/排序/过滤。

    这意味着对服务器的请求明显减少,但消息有效负载也会更大。

    我不确定,因为我没有足够的调查,但我们可能需要深入研究WCF RIA Services以使其发挥作用,或者我们可能最好不要抓RIA和在WCF之上做我们自己的事情。但是,这将使我们能够灵活地选择需要在隐藏/显示列方案中将哪些列发送到浏览器,这将降低整个生产线的总体负载。

  4. tl; dr =将所有数据通过网络发送一次,或者将其分页是否更好?

    1. 看来答案很大程度上取决于数据量,但你们是如何做出这个决定的呢?

    2. 请求中要发送多少数据?分页什么时候变得更有效率?或至少在表面上对用户更有效率?**

    3. 从业务角度来看,何时更好地使用内置工具而不是自己动手。假设你自己的效率更高,你如何衡量效率与额外工作的价值?

1 个答案:

答案 0 :(得分:0)

在我们的应用程序中,我们有时会使RIA调用返回多达10Mb的数据,但是在最简单的意义上工作,但是当我们部署时,我们确实会在我们的对接中咬我们,因为有各种限制整个Web服务器< - > HTTP< - >导致问题的浏览器堆栈。我说的是超时,缓冲区大小,最大请求大小等。顺便说一下,增加RIA呼叫的超时并不是一件简单的事情。

为了缓解这些痛苦,我们开始在RIA中以较小的块获取大量呼叫。我们有一个服务器端查询,当执行时返回所需行的所有主键(例如10000个guid)。然后在客户端上,我们使用RIA通过主键一次以500块的方式获取对象。

这给我们带来的最大好处是用户体验,因为我们可以显示加载了多少数据的进度条。分块也很有用,因为它可以使服务器保持更快的响应速度。在一次调用中加载10mb的数据只占用服务器,但加载几个块可以更平滑地共享资源。

希望有所帮助。