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.