如何读取块中的大量数据?

时间:2012-10-24 10:42:25

标签: 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服务方法中的最后两个参数指定应在每次调用中获取的数据块的大小。例如,如果我们有1050条记​​录,那么所有这些记录应该以100块为单位获得10次,而以50块为单位获得1次。

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

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

  2. 我如何知道何时到达终点?

1 个答案:

答案 0 :(得分:1)

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

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

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;
}

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