Да, вы можете передавать данные в 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
для сериализации практически любого дерева объектов .
для подробностей проверьте это и это
Хотя это звучит просто, существуют сложности и ограничения для режима потоковой передачи. Если вам просто нужен простой способ обойти ограничения размера для передачи большого объекта, рассмотрите возможность частичной отправки объекта при нескольких вызовах.