Как обрабатывать загрузки больших файлов через WCF?

Я изучаю использование WCF для проекта, который потребует от людей возможности загружать большие файлы (64 МБ-1 ГБ) на мой сервер. Как бы я справился с этим с WCF, возможно, с возможностью возобновления загрузки.

Чтобы справиться с большей клиентской базой, я хотел протестировать JSON через WCF. Как это повлияет на загрузку файла? Это может быть сделано из JSON, или им нужно будет переключиться на REST для загрузки части?

3 ответа

Решение

Если вы хотите загружать большие файлы, вам обязательно нужно заглянуть в потоковый режим WCF.

По сути, вы можете изменить режим передачи на вашей привязке; по умолчанию оно буферизуется, т. е. все сообщение должно быть буферизовано в отправителе, сериализовано и затем передано целиком.

С помощью Streaming вы можете определить либо одностороннюю потоковую передачу (только для загрузки, только для загрузки), либо двунаправленную потоковую передачу. Это делается путем установки TransferMode вашей привязки в StreamedRequest, StreamedResponseили просто Streamed,

<bindings>
   <basicHttpBinding>
      <binding name="HttpStreaming" 
               maxReceivedMessageSize="2000000"
               transferMode="StreamedRequest"/>
   </basicHttpBinding>
</bindings>

Тогда вам нужно иметь сервисный контракт, который либо получает параметр типа Stream (для загрузки) или возвращает значение типа Stream (для скачивания).

[ServiceContract]
public interface IFileUpload
{
    [OperationContract]
    bool UploadFile(Stream stream);
}

Это должно сделать это!

MTOM оптимизирован для обработки больших двоичных данных.

Вы можете использовать webHttpBinding с потоковой передачей TransferMode и одним параметром Stream или ответом Stream (в зависимости от случая) для загрузки / загрузки больших файлов, но вам придется отправлять любые метаданные запроса через URL-адреса и / или заголовки, если вы не собираетесь разрабатывать ваше собственное обрамление в потоке. Вам придется создать собственный не HTML-клиент (например, Silverlight, Flash и т. Д.), Поскольку браузеры не поддерживают произвольный доступ к локальным файлам, и обычная загрузка файлов будет отправкой в ​​форме, а не JSON.

Другие вопросы по тегам