C# 如何在块中读取大量数据?

C# 如何在块中读取大量数据?,c#,wcf,soap,chunks,C#,Wcf,Soap,Chunks,我有一个项目,我应该使用外部WCF服务,该服务的方法如下所示: Items catalogItems = externalClient.getCatalogItems(auth, idCatalog, 1, 100); 调用getCatalogItems服务方法后,我应该以以下方式将返回的项数组转换为原始SOAP消息: Message response = Message.CreateMessage(MessageVersion.Default, ReplyAction_GetCatalogI

我有一个项目,我应该使用外部WCF服务,该服务的方法如下所示:

Items catalogItems = externalClient.getCatalogItems(auth, idCatalog, 1, 100);
调用getCatalogItems服务方法后,我应该以以下方式将返回的项数组转换为原始SOAP消息:

Message response = Message.CreateMessage(MessageVersion.Default, ReplyAction_GetCatalogItems, catalogItems);
getCatalogItems服务方法中的最后两个参数指定在每次调用中应获得的数据块的大小。例如,如果我们有1050条记录,那么所有记录都应该在100块中获得10次,在50块中获得1次

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

  • 我怎么知道我应该在哪里继续阅读?例如,如果我读过100条记录的第一部分,我如何知道读卡器的当前位置

  • 我怎么知道我什么时候到达终点


  • 一种方法是让客户机负责记住状态(即客户机当前所在的页码)

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

    Items catalogItems = externalClient.getCatalogItems(auth, idCatalog, pageNumber, itemsPerPage);
    
    然后,服务可以根据pageNumber和itemsPerPage值选择一组项目,而不需要保存状态。(注意:如果使用数据库作为项目的存储库,则可以轻松地将其转换为select查询)

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


    这也为客户端提供了灵活性,可以确定每次呼叫中要接收的项目块,并让最终用户选择页面大小。

    不幸的是,我无法更改原始的服务方法。如果您知道项目总数,则可以将其作为客户端的责任。只需根据客户端当前所在的页码确定起始行和结束行。我已经用另一种方法解决了这个问题。无论如何,谢谢你。
    CatalogResponse respone = externalClient.getCatalogItems(auth, idCatalog, pageNumber, itemsPerPage);
    
    public class CatalogResponse 
    {
       private _totalItems;
       private _items;
    }