c# wcf json large-file-upload

c# - ¿Cómo manejar grandes cargas de archivos a través de WCF?



json large-file-upload (3)

Estoy buscando utilizar WCF para un proyecto que requeriría la capacidad de personas para cargar archivos grandes (64 MB-1 GB) a mi servidor. ¿Cómo manejaría esto con WCF, posiblemente con la capacidad de reanudar las cargas?

Para manejar una base de clientes más grande, quería probar JSON a través de WCF. ¿Cómo afectaría esto la carga del archivo? ¿Se puede hacer desde JSON, o tendrían que cambiar a REST para la porción de carga?


Puede usar webHttpBinding con TransferMode transmitido y un solo parámetro Stream o Stream response (según corresponda) para archivos de gran tamaño / descargas, pero deberá enviar cualquier metadato de solicitud a través de URL y / o encabezados, a menos que vaya a diseñar tu propio encuadre en el Stream. Sin embargo, tendrá que crear un cliente personalizado que no sea HTML (como Silverlight, Flash, etc.), ya que los navegadores no admiten el acceso aleatorio a archivos locales, y la carga normal de archivos será una publicación de formulario, no JSON.


Si desea cargar archivos de gran tamaño, definitivamente deberá consultar el Modo de transmisión WCF .

Básicamente, puede cambiar el modo de transferencia en su enlace; de forma predeterminada, está almacenado en búfer, es decir, todo el mensaje debe almacenarse en el buzón, ser serializado y luego transmitirse como un todo.

Con Streaming, puede definir la transmisión unidireccional (solo para cargas, solo para descargas) o la transmisión bidireccional. Esto se hace estableciendo el TransferMode de su enlace a StreamedRequest , StreamedResponse , o simplemente Streamed .

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

Luego necesita tener un contrato de servicio que reciba un parámetro de tipo Stream (para cargas) o devuelva un valor de tipo Stream (para descargas).

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

¡Deberias hacer eso!


MTOM está optimizado para manejar grandes datos binarios.