2012-10-24 4 views
2

나는 다음과 같은 보이는 방법을 가지고 외부 WCF 서비스를 사용한다 프로젝트가 :많은 양의 데이터를 청크로 읽는 방법?

내가 getCatalogItems에게 서비스 메소드를 호출 한 후
Items catalogItems = externalClient.getCatalogItems(auth, idCatalog, 1, 100); 

,이 방식으로 원시 SOAP 메시지에 대한 항목의 반환 된 배열을 변환한다 :

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

getCatalogItems 서비스 방법의 마지막 2 개 파라미터는 각각의 호출에 데이터 취득의 덩어리의 크기를 나타낸다. 예를 들어 1050 개의 레코드가있는 경우 100 개의 청크로 10 번, 50 번 청크로 1 번 가져와야합니다.

데이터를 사용할 수있을 때까지 읽어야합니다. 질문이 두 개 있습니다.

  1. 어디서 계속 읽어야하는지 어떻게 알 수 있습니까? 예를 들어 100 레코드 중 첫 번째 부분을 읽은 경우 독자의 현재 위치는 어디에서 알 수 있습니까?

  2. 언제 끝까지 도달했는지 어떻게 알 수 있습니까?

답변

1

하나의 접근법은 상태 (즉, 클라이언트가 현재있는 페이지 번호)를 기억하는 것이 클라이언트의 책임이되도록하는 것입니다.

그래서 당신은 페이지 매개 변수 당 페이지 번호와 항목을 포함하도록 메서드 호출을 변경할 수 있습니다 : 서비스가 다음 본질적으로 PAGENUMBER 및 itemsPerPage 값을 기준으로 항목 집합을 선택할 수 있습니다

Items catalogItems = externalClient.getCatalogItems(auth, idCatalog, pageNumber, itemsPerPage); 

을 그리고 필요가 없다 그 상태를 유지하십시오. (참고 :이 항목에 대한 저장소로 데이터베이스를 사용하는 경우이 쉽게 선택 쿼리로 변환 할 수 있습니다) : 예 :

당신은 아마도뿐만 아니라 항목의 총 수를 포함하는 반환 값을 변경할 수 있습니다

이렇게하면 클라이언트가 각 통화에서 수신 할 항목 청크를 결정하고 최종 사용자가 페이지 크기를 선택할 수있는 유연성을 제공합니다.

+0

불행히도 원래 서비스 방법을 변경할 수 없습니다. – tesicg

+0

총 항목 수를 알면 클라이언트의 위치를 ​​지정할 수 있습니다. 클라이언트가 현재 가지고있는 페이지 번호를 기준으로 시작 행과 끝 행을 결정해야합니다. – Ngm

+0

다른 방법으로 그 방법을 알아 냈습니다. 어쨌든 고맙습니다. – tesicg

관련 문제