2012-11-20 3 views
1

또는 적어도 올바른 용어는 stateful이라고 생각합니다. 나는 wcf 서비스를 가지고 있고, 많은 데이터를 나에게 등재했다. 실제로 많은 데이터, 나는 maxrecievedmessagesize를 초과하고 있으며 프로그램이 충돌합니다.WCF 상태 저장 서비스

DB로 호출을 분할해야한다는 것을 알게되었습니다. 5000 행을 검색하는 대신 행 1 - 200을 가져와 행 번호 200의 ID를 기억하고 200 행 번호의 ID에서 다음 200 행을 가져와야합니다.

누구든지이 작업을 수행하는 방법을 알고 있습니까? 상태 유지 ('무국적자의 반대'에서처럼)가 올바른 방법입니까? 그리고 나는 어떻게 진행할 것인가? 누군가 예를 들어 설명해 줄 수 있습니까?

+1

가능한 경우 서비스는 항상 ** 상태 비 저장 **이어야합니다. 기본적으로 ** 발신자 **는 자신이 원하는 행 (1-100, 101-200 등)을 지정해야합니다. 서비스 자체는 상태에 대해 알 필요가 없습니다. 클라이언트가 요청한 행만 반환합니다. –

+1

@marc_s 당신은 서비스가 무국적이어야한다는 것이 옳은 반면, 명백한 행 번호를 클라이언트에 되돌려 보내면 서비스의 내부 상태와 기본 데이터베이스 ...를 피할 수 있습니다. 또한 피하는 것이 좋습니다. ... 그러나 어쨌든 전체 행 (id와 함께)이 반환되면 완전히 맞습니다. 따라서 투표를하십시오. – Daniel

+1

행 1 - 100을 얻고 101 - 200을 얻습니다. 누군가 행 58을 변경하면 어떻게됩니까? ? 국가를 사용하여 이것을 막지 않겠습니까? 그리고 이런 종류의 문제에 대해 가장 좋은 방법은 무엇입니까? (호출자가 행 1 - 100을 얻고 101 - 200을 얻도록 결정) – myUser8519

답변

0

시나리오에서는 상태 저장 서비스가 필요하지 않습니다. 특히 5000 행을 저장하려는 경우에는 상태 저장 서비스를 피하는 것이 좋습니다.

클라이언트는 필요한 데이터의 양을 지정해야합니다. 따라서 메소드 GetRows (index, amount)가 될 수 있습니다. 여기서 index는 행을 가져 오는 시작 인덱스와 시작 인덱스에서 시작하는 행의 양입니다.

또한 클라이언트는 서비스로부터 데이터 상태에 대해 질문해야하며 서비스는 데이터 상태를 보냅니다. 예를 들어,이 5000 개의 행이있는 경우 GetRowsState (index, amount)라는 서비스의 메소드와 행의 마지막 업데이트 시간을 나타내는 동일한 스토리를 가질 수 있습니다.받은 시간이 클라이언트에서 더 높거나 다른 경우, 다시 한 번 클라이언트 데이터 상태를 업데이트하기 위해 서버에서 GetRows로 이동합니다.