Я изучаю использование WCF для проекта, который потребовал бы способности к людям загрузить большие файлы (64MB-1GB) на мой сервер. Как я обработал бы это с WCF, возможно со способностью возобновить загрузки.
Для обработки более многочисленной клиентской базы я хотел проверить JSON через WCF. Как это влияло бы на загрузку файла? Это может быть сделано от JSON, или они должны были бы переключиться на REST для части загрузки?
Если вы хотите загрузить большие файлы, вам определенно нужно посмотреть в Режим потоковой передачи 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);
}
Это должно сработать!
.Вы можете использовать webHttpBinding с потоковой передачей TransferMode и одним параметром Stream или ответом Stream (при необходимости) для загрузки / загрузки больших файлов, но вам придется отправлять любые метаданные запроса через URL-адреса и / или заголовки, если только вы не собираетесь разрабатывать собственное обрамление в Stream. Однако вам придется создать собственный клиент, отличный от HTML (например, Silverlight, Flash и т. Д.), Поскольку браузеры не поддерживают произвольный доступ к локальным файлам, а обычная загрузка файла будет представлять собой сообщение формы, а не JSON.
MTOM оптимизирован для обработки больших двоичных данных.