我有WCF服务器和silverlight客户端。客户端调用服务器来获取项目列表。如何从服务器'获取'物品的大列表?
有一些情况下,该项目列表是非常大的,我想必须让更多还有一个调用的项目的能力 -
- CALL1 =>拿到物品0-100
- Call2(如果用户点击“更多”按钮)=>获得项目101-200
- 。
- 。
- 调用N =>获得100 * n - 100 *(n + 1)个项目。
我该怎么办?
有没有一些'简单'的模式来做到这一点?
谢谢。
我有WCF服务器和silverlight客户端。客户端调用服务器来获取项目列表。如何从服务器'获取'物品的大列表?
有一些情况下,该项目列表是非常大的,我想必须让更多还有一个调用的项目的能力 -
我该怎么办?
有没有一些'简单'的模式来做到这一点?
谢谢。
如果您的标准页面大小为100,则让客户端将他们想要的页面传递给该服务。或者让客户告诉服务他们的页面有多大以及他们想要哪个页面
您可以在内存中保存客户端所在的服务页面,然后再说“Next”,但将内存状态保存在代表客户端的服务降低了可扩展性并增加了易碎性(如果该状态丢失,那么客户端必须再次开始分页)
使客户端明确地说出他们想要的是一个更强大和可扩展的解决方案, LINQ实现Skip and Take
正如Richard提到的,分页是一个常用选项,并且将结果作为流返回(而不是缓存的byte []数组,而是实际的流 - WCF有一些使用流的注意事项)通常是最有效的。另外marc_s指出,Silverlight本地存储并不是很大,所以请记住这一点。
用户“一次消费”超过100件商品的机会非常小,即使商品的细节非常少,也许会添加导航(类别等)作为数据过滤器,因此用户只会获得他们实际上感兴趣的20个左右的项目。树视图可以很方便地将列表分成与用户更相关的小列表,但有很多方法可以做到这一点......
Silverlight强制使用WCF特别是**停止**加载过大的数据集 - 你需要重新考虑你的应用程序 - 找不到解决方法... –