Abbiamo un servizio Web (asmx) che accetta un buffer di array di byte e lo invia a un servizio di file esterno per l'archiviazione e l'archiviazione. Viene chiamato da un servizio di Windows che genera file di dimensioni ridotte (3-5 M), quindi la creazione di un array di byte di tale dimensione e l'alimentazione come parametro per la chiamata al servizio web ha funzionato bene fino ad ora.Streaming di file di grandi dimensioni sul servizio Web
Sono stato incaricato di aggiungere un nuovo lavoro alla coda file che potenzialmente genererà file di> 70 M. Ovviamente una dimensione byte[]
sommergerà la memoria di sistema, quindi ho cercato soluzioni. Il servizio web ha un metodo interno che prende uno FileStream
come parametro invece di uno byte[]
, quindi ho provato ad emettere il metodo FileStream come un metodo Web. Ho aggiornato i riferimenti nel servizio di Windows, ma accade una cosa strana: il parametro FileStream ha uno specificatore di namespace allegato (qualcosa come CallingWindowsService.ExternalWebServiceFileManager.FileStream
) e questo oggetto specificato non accetta alcun nome di file come costruttore, quindi non posso aprire uno specifico file.
Sono totalmente in mare su come avvicinarsi a questo. Qualcun altro ha fatto questo - lo streaming di grandi quantità di dati da a un servizio web - e se sì, qual è il metodo migliore? Il mio servizio web avrà bisogno di uno byte[]
o FileStream
.
Guardando attraverso alcuni degli altri messaggi, sembra che MTOM (che non ha familiarità con esso) potrebbe essere una soluzione, ma non sono sicuro di come configurarlo nei miei metodi web o farlo funzionare.
La buona notizia è che abbiamo deciso di aggiungere la funzionalità a un servizio WCF esistente, in modo che la parte ricevente sia gestita. Sono ancora in mare, però, a proposito di chiamare il servizio dal mio servizio di Windows. La funzione che chiama il servizio di trasmissione file prende un byte [] come parametro, quindi la mia routine di creazione file deve restituire quel buffer. Sembra che ho bisogno di refactoring in modo che il buffer è dichiarato nella routine di creazione di file e quella routine chiama il servizio iterativamente per trasmettere il file in blocchi? –
Forse refactoring tutto per utilizzare flussi invece di matrici di byte? MemoryStream può essere costruito da un array di byte. –