2012-10-24 129 views
2

我有一個項目,我應該使用具有方法看起來如下外部WCF服務:如何以塊讀取大量數據?

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

後,我打電話getCatalogItems服務方法,我應該改造項目的原始SOAP消息的返回數組以這種方式:

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

getCatalogItems服務方法中的最後2個參數指定應在每次調用中獲取的數據塊的大小。例如,如果我們有1050記錄了所有的人都應該在50

塊獲得10倍的100和1次塊我明白我應該讀出的數據,直到他們都可用。我有2個問題:

  1. 我怎麼知道,我應該繼續讀書?舉例來說,如果我讀的100條記錄第一部分,我怎麼知道是讀者的當前位置?

  2. 我怎麼知道,當我到達終點?

回答

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

這也爲客戶提供了靈活性,以確定在每次調用中要接收的項目塊和最終用戶選擇頁面大小。

+0

不幸的是,我不能改變原有的服務方法。 – tesicg

+0

如果你知道的項目總數,那麼你就可以直到使客戶端的resposinlity。只要有確定的起始行和基於頁面數你的客戶是目前在最後一行。 – Ngm

+0

我已經想通了如何用另外的方式。不管怎樣,謝謝你。 – tesicg