c# - 如何分块读取大量数据?

标签 c# wcf soap chunks

我有一个项目,我应该在其中使用具有如下方法的外部 WCF 服务:

Items catalogItems = externalClient.getCatalogItems(auth, idCatalog, 1, 100);

调用 getCatalogItems 服务方法后,我应该以这种方式将返回的项目数组转换为原始 SOAP 消息:

Message response = Message.CreateMessage(MessageVersion.Default, ReplyAction_GetCatalogItems, catalogItems);

getCatalogItems 服务方法中的最后两个参数指定每次调用中应获取的数据 block 的大小。例如,如果我们有 1050 条记录,所有这些记录都应该以 100 条为一组获取 10 次,以 50 条为一组获取 1 次。

我知道我应该阅读数据直到它们可用。我有两个问题:

  1. 我怎么知道应该从哪里继续阅读?例如,如果我已经阅读了 100 条记录的第一部分,我如何知道阅读者当前位置在哪里?

  2. 我怎么知道我什么时候到达终点?

最佳答案

一种方法是让客户有责任记住状态(即客户当前所在的页码)。

因此您可以更改方法调用以包含页码和每页项目参数:

Items catalogItems = externalClient.getCatalogItems(auth, idCatalog, pageNumber, itemsPerPage);

然后,该服务基本上可以根据 pageNumber 和 itemsPerPage 值选择一组项目,而无需保存状态。 (注意:如果您使用数据库作为项目的存储库,这可以很容易地转换为选择查询)

您也可以更改返回值以包括项目总数: 示例:

CatalogResponse respone = externalClient.getCatalogItems(auth, idCatalog, pageNumber, itemsPerPage);

public class CatalogResponse 
{
   private _totalItems;
   private _items;
}

这还为客户端提供了灵 active ,可以确定每次调用中要接收的项目 block ,并为最终用户选择页面大小提供了灵 active 。

关于c# - 如何分块读取大量数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13047575/

相关文章:

c# - 从多个表连接 mysql 4.0 数据的最快方法?

c# - 找不到类型或命名空间名称 'ImageEntitiesContainer'

asp.net - 将 JSON 数组传递到 WCF Web 服务

visual-studio - Visual Studio 无法打开端口来承载 WCF 服务

java - 在 SOAPUI 中创建 JDBC 连接

jquery - 使用 AJAX jQuery 和 SOAP 调用 WebService

c# - 如何删除在 ASP.NET MVC4 SimpleMembership 中具有角色的用户?

c# - 混合winForm/wpf应用程序中的ReactiveUI

c# - 我应该使用哪种集合类型以获得最佳性能?

php - Netsuite:如何将自定义字段附加到销售订单