我有一个项目,我应该在其中使用具有如下方法的外部 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 次。
我知道我应该阅读数据直到它们可用。我有两个问题:
我怎么知道应该从哪里继续阅读?例如,如果我已经阅读了 100 条记录的第一部分,我如何知道阅读者当前位置在哪里?
我怎么知道我什么时候到达终点?
最佳答案
一种方法是让客户有责任记住状态(即客户当前所在的页码)。
因此您可以更改方法调用以包含页码和每页项目参数:
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/