2016-09-04 7 views
0

WCF 서비스에서 큰 결과 집합을 반환하려고합니다. 큰 결과 세트에는 대략 500K 개의 레코드가 있고 각 레코드에는 150 개의 컬럼이 있습니다.WCF에서 큰 콜렉션 결과 집합을 반환하는 중

WCF 바인딩을 구성하여 큰 결과 집합을 반환 할 수 있음을 알고 있습니다. 그러나 나는 한계에 대해 확신하지 못한다. 이 시나리오를 시도했지만이 속성의 값을 "2147483647"로 설정하더라도 "maxItemsInObjectGraph"속성의 제한을 늘리려면 오류가 발생했습니다. 나는 대체 옵션을 검색해 보았고 이것이 Binding의 messageEncoding 및 transferMode 속성을 통해 얻을 수 있음을 발견했습니다. "Mtom"및 "StreamResponse"로 시도했지만 어떻게 작동하는지 잘 모르겠습니다.

나는 또한 this 링크를 참조했지만 내 클라이언트가 한 번에 데이터를 원할 때 페이지 매김을 만들고 싶지 않습니다.

그래서 결론은 다음과 같습니다

1. Can we return large result set from WCF? Or Does the use of WCF best to return large result set or I need to move to different way like WebAPI? 
2. StreamResponse should work like returning results in chunck I guess but after implementation, I don't think it is working as I am getting result altogether. 

귀하의 입력을 이해할 수있을 것이다.

감사합니다.

답변

0
  1. WCF 서비스에서 대형 개체 집합을 반환 할 수 있습니다. WebAPI 또는 기타 .NET 서비스 프레임 워크는 많은 양의 데이터를 전송하는 것을 고려하지 않는 장점이 있습니다.
  2. StreamResponse가 최선의 선택입니다. 메시지를 부분별로 전송하므로 한 번에 500K 개의 모든 레코드가 유선에 남아 있지 않습니다. 그것은 전송 계층 옵션입니다. 따라서 클라이언트는 한 번에 전체 메시지를 얻은 것처럼 보입니다. 바인딩의 MaxBufferSize 속성을 편집하여 해당 부분 크기를 관리 할 수 ​​있습니다. 데이터 크기를 최소화하려면 BinaryMessageEncoding을 사용하여 압축 할 수도 있습니다.

    <customBinding> 
    <binding name="primaryBinding" openTimeout="00:01:00" closeTimeout="00:01:00" 
          sendTimeout="00:30:00" receiveTimeout="00:30:00"> 
        <binaryMessageEncoding compressionFormat="GZip"> 
        <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
            maxArrayLength="2147483647" maxBytesPerRead="2147483647" 
            maxNameTableCharCount="2147483647" /> 
        </binaryMessageEncoding> 
        <httpsTransport transferMode="Streamed" maxReceivedMessageSize="6000000" 
            maxBufferSize="6000000" maxBufferPoolSize="12000000" />   
    </binding>