Se si desidera caricare file di grandi dimensioni, sarà sicuramente necessario esaminare WCF Streaming Mode.
Fondamentalmente, è possibile modificare la modalità di trasferimento sull'associazione; per impostazione predefinita, è memorizzato nel buffer, ovvero l'intero messaggio deve essere memorizzato nel buffer del mittente, serializzato e quindi trasmesso nel suo complesso.
Con Streaming, è possibile definire lo streaming unidirezionale (solo per gli upload, solo per i download) o lo streaming bidirezionale. Questo viene fatto impostando il transferMode del tuo binding su StreamedRequest
, StreamedResponse
, o semplicemente su Streamed
.
<bindings>
<basicHttpBinding>
<binding name="HttpStreaming"
maxReceivedMessageSize="2000000"
transferMode="StreamedRequest"/>
</basicHttpBinding>
</bindings>
Poi è necessario disporre di un contratto di servizio che o riceve un parametro di tipo Stream
(per il caricamento), oppure restituisce un valore di tipo Stream
(per i download).
[ServiceContract]
public interface IFileUpload
{
[OperationContract]
bool UploadFile(Stream stream);
}
Questo dovrebbe farlo!
fonte
2009-12-20 09:44:22
Cosa fare se la richiesta/risposta deve seguire uno schema specifico? Vale a dire, wat se la richiesta deve essere un oggetto specifico, e la tua wsdl deve rifletterci? Come lo applicheresti con un flusso? – Jeremy
@Jeremy: come la mia risposta dice: se si desidera utilizzare il trasferimento in streaming, è possibile ** solo ** utilizzare un singolo parametro di tipo 'Stream' (o un valore di ritorno di tipo' Stream'). Se non è possibile progettare il servizio in questo modo e devono seguire altri requisiti specifici, sfortunatamente non è possibile utilizzare il trasferimento di streaming. Non c'è un modo * magico * per fare questo lavoro. –
@marc_s che ne dici di un singolo grande parametro stringa? [La mia domanda recente] (https://stackoverflow.com/questions/48774474/parameter-size-limit-for-strings#comment84577011_48774474) è stata contrassegnata come duplicata di questo, ma posso impostare il parametro corretto per passare facilmente 1.2 gb 'byte [] 'parametro per metodo senza problema, ma se si modifica il tipo di parametro da' byte [] 'a' stringa', si limita a circa 28 mb. Devo avere 'stringa' come parametro. – Franck