Как реализовать потоковую передачу в WCF? - PullRequest
2 голосов
/ 08 августа 2011

Я сталкиваюсь с проблемой при использовании WCF для извлечения большого объема данных, поэтому я не хочу увеличивать значение "maxReceivedMessageSize =" 65536 ". Поэтому любая альтернатива для этого или я могу добиться этого с помощью потоковой передачи. Если да тогда как?

Пожалуйста, предложите.

1 Ответ

2 голосов
/ 08 августа 2011

Да, вы можете передавать данные в WCF, но WCF имеет некоторые ограничения при работе в потоковом режиме. Поэтому вы можете рассмотреть возможность реализации метода, который возвращает порции данных и вызывает их несколько раз, если вы не против обрабатывать его самостоятельно.

В противном случае вы можете включить Потоковый режим в конфигурации, такой как

<basicHttpBinding>
  <binding name="HttpStreaming" maxReceivedMessageSize="67108864"
           transferMode="Streamed"/>
</basicHttpBinding>
<!-- an example customBinding using Http and streaming-->
<customBinding>
  <binding name="Soap12">
    <textMessageEncoding messageVersion="Soap12WSAddressing10" />
    <httpTransport transferMode="Streamed" maxReceivedMessageSize="67108864"/>
  </binding>
</customBinding>

И вернуть Stream объект из вашего метода Contract. Таким образом, данные будут передаваться при чтении объекта потока.

interface IRemoteFileService
{
     Stream OpenFile(string serverPath);
}

если ваши данные находятся в потоке, как при передаче файла. Вы просто открываете поток и возвращаете его. в противном случае вы можете использовать MemoryStream и DataContractSerializer для сериализации практически любого дерева объектов .

для подробностей проверьте это и это

Хотя это звучит просто, существуют сложности и ограничения для режима потоковой передачи. Если вам просто нужен простой способ обойти ограничения размера для передачи большого объекта, рассмотрите возможность частичной отправки объекта при нескольких вызовах.

...