从块中获取WCF的大列表<T>?

Seb*_*Piu 7 c# wcf

我正在尝试从WCF服务获取实体列表,我遇到的问题是我们在网络上有一些不良延迟,因此数据需要相当长的时间才能到达我的客户端.我的想法是找到一种方法来获得前1000个,并在我等待下一个到达时将它们推送到UI.

我想这会像分页,但我只是想在WCF层中分页整个集,而不是从db一次获取一个页面

干杯

Ali*_*tad 6

在将消息交给更高级别之前,WCF会完整地查看消息.因此,您的数据需要完整到达并且通常的WCF合同将无效.

但是,您可以使用WCF进行流式处理.这允许有效载荷从流中逐渐读取并传递到更高级别.为了使其正常工作,您需要:

  • 启用流媒体(在我提供的链接中)
  • 更改服务合同以提供流
  • 在服务器端,开始序列化实体并写入流,可能是100个块.您需要自己序列化实体,尽管使用DataContractSerializer我们的盒子非常简单.
  • 您需要在这100个实体中的每个实体之间提供分隔符,以便您的流程可以找到当前100完成的位置.一种可能的选择是1 KB的字节零.
  • 在客户端,实现Async的功能.继续从缓冲区中读取流(例如4KB),直到达到分隔符.一旦命中,反序列化并引发异步事件.

将更复杂,WCF直接开箱即用,但实现了您的需求.


Seb*_*Piu 0

最后,当我使用 tcpTransport 进行通信时,我结束了使用双工通道来完成我需要的操作。

我所做的只是更改当前的 SearchMethod,该方法返回一个大列表为空。在这个方法中,我从数据库获取数据,将其分块并通过回调操作将其发送到客户端