我正在尝试从 WCF 服务获取实体列表,我遇到的问题是网络上存在一些严重的延迟,因此数据需要相当长的时间才能到达我的客户端。我的想法是找到一种方法来获取前 1000 个,然后将它们推送到 UI,同时等待下一个到达。
我想这就像分页,但我只想对 WCF 层中的全套进行分页,而不是一次从数据库获取一页
Cheers
WCF 在将消息传递给更高级别之前会查看整个消息。因此,您的数据需要完整到达,而通常的 WCF 合同将不起作用。
但是,您可以使用使用 WCF 进行流式传输。这允许逐渐从流中读取有效负载并将其传递到更高级别。为了让它工作,你需要:
- 启用流媒体(在link我提供)
- 更改服务合同以提供流
- 在服务器端,开始序列化实体并写入流,可能以 100 个块的形式写入。尽管使用我们的 DataContractSerializer 非常简单,但您需要自己序列化实体。
- 您需要在这 100 个实体之间提供一个分隔符,以便您的流程可以发现当前 100 个实体的完成位置。一种可能的选择是 1 KB 的字节零。
- 在客户端,将函数实现为异步。继续从缓冲区中的流中读取(例如 4KB),直到到达分隔符。一旦命中,反序列化并引发异步事件。
这会更复杂该 WCF 开箱即用,但可以满足您的需求。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)