2

次のようなメソッドを持つ外部 WCF サービスを使用する必要があるプロジェクトがあります。

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

getCatalogItems サービス メソッドを呼び出した後、返されたアイテムの配列を次の方法で生の SOAP メッセージに変換する必要があります。

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

getCatalogItems サービス メソッドの最後の 2 つのパラメーターは、各呼び出しで取得する必要があるデータのチャンクのサイズを指定します。たとえば、1050 のレコードがある場合、それらすべてを 100 のチャンクで 10 回、50 のチャンクで 1 回取得する必要があります。

データが利用可能になるまでデータを読む必要があることを理解しています。2 つの質問があります。

  1. 読み続けるべき場所をどうやって知ることができますか? たとえば、100 レコードの最初の部分を読んだ場合、reader の現在の位置を知るにはどうすればよいでしょうか?

  2. 最後に到達したことをどのように知ることができますか?

4

1 に答える 1

1

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

これにより、クライアントが各呼び出しで受信するアイテムのチャンクを決定し、エンド ユーザーがページ サイズを選択する柔軟性も提供されます。

于 2012-10-24T10:55:00.030 に答える