2016-09-04 8 views
0

Я пытаюсь вернуть большой набор результатов из службы WCF. Большой набор результатов, вероятно, будет иметь подходящие записи 500K, и каждая запись будет иметь 150 столбцов.Возвращение большого набора collectionresult из WCF

Я знаю, настраивая привязки WCF, мы можем вернуть большой набор результатов. Но я не уверен в этом. Я пробовал этот сценарий, но получил ошибку, чтобы увеличить лимит свойства «maxItemsInObjectGraph», даже если установить значение «2147483647» этого свойства. Я искал альтернативные варианты и обнаружил, что это может быть достигнуто с помощью свойства 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 .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>