Come gestire i caricamenti di file di grandi dimensioni tramite WCF?

Sto cercando di utilizzare WCF per un progetto che richiede la possibilità per le persone di caricare file di grandi dimensioni (64 MB-1 GB) sul mio server. Come gestirlo con WCF, possibilmente con la possibilità di riprendere i caricamenti.

Per gestire una base di clienti più ampia, volevo testare JSON tramite WCF. Come influirebbe sul caricamento del file? Può essere eseguito da JSON o è necessario passare a REST per la porzione di caricamento?

Se si desidera caricare file di grandi dimensioni, sarà sicuramente necessario esaminare la modalità di streaming WCF .

In sostanza, è ansible modificare la modalità di trasferimento sull’associazione; per impostazione predefinita, è bufferizzato, ovvero l’intero messaggio deve essere memorizzato nel buffer del mittente, serializzato e quindi trasmesso nel suo complesso.

Con Streaming, puoi definire uno streaming a senso unico (solo per gli upload, solo per i download) o lo streaming bidirezionale. Ciò avviene impostando il metodo di trasferimento del binding su StreamedRequest , StreamedResponse o semplicemente Streamed .

      

Quindi è necessario un contratto di servizio che riceve un parametro di tipo Stream (per i caricamenti) o restituisce un valore di tipo Stream (per i download).

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

Questo dovrebbe farlo!

MTOM è ottimizzato per gestire grandi dati binari.

Puoi utilizzare webHttpBinding con TransferMode in streaming e un singolo parametro Stream o Stream response (come appropriato) per file di grandi dimensioni / download, ma dovrai inviare qualsiasi metadata di richiesta tramite URL e / o intestazioni, a meno che non intendi la tua inquadratura sul stream. Dovrai creare un client non HTML personalizzato (come Silverlight, Flash, ecc.), Poiché i browser non supportano l’accesso casuale ai file locali, e il normale caricamento dei file sarà un post del modulo, non JSON.