2011-09-22 16 views
16

Sto pianificando di passare MemoryStream tramite lo streaming WCF ma sembra non funzionare, ma quando cambio leggermente il codice per passare FileStream, invece, funziona. In realtà, il mio scopo è di passare una vasta collezione di oggetti business (serializzabili). Sto usando basicHttpBinding. Il tuo suggerimento sarebbe molto apprezzato!Come trasferire MemoryStream via Streaming WCF

Modificato: I sintomi del problema sono che il flusso in entrata è vuoto. Non c'è né errore né eccezione.

+0

E se è in mancanza, un'eccezione deve essere stato gettato. Dove riesci a prenderlo? Qual è stato il messaggio di errore? Il messaggio ti dà qualche indizio su cosa sta succedendo? –

+0

Grazie mille per le risposte. Ho postato questa domanda per un capriccio dato che mi ha portato alla disperazione per un paio di giorni. –

risposta

51

Non si forniscono molti dettagli, tuttavia, sono quasi certo di sapere qual è il problema, come ho visto accadere molto.

Se si scrive qualcosa su un MemoryStream per restituirlo come risultato di un'operazione di servizio WCF, è necessario reimpostare manualmente il flusso all'inizio, prima di restituirlo. WCF leggerà il flusso dalla sua posizione attuale , quindi restituirà un flusso vuoto se quella posizione non è stata ripristinata.

Questo spiegherebbe almeno il problema che stai descrivendo. Spero che questo ti aiuti.

Ecco alcuni esempi di codice:

[OperationContract] 
    public Stream GetSomeData() 
    { 
     var stream = new MemoryStream(); 
     using(var file = File.OpenRead("path")) 
     { 
      // write something to the stream: 
      file.CopyTo(stream);   
      // here, the MemoryStream is positioned at its end 
     } 
     // This is the crucial part: 
     stream.Position = 0L; 
     return stream; 
    } 
+4

Grazie mille .. Hai letteralmente salvato la giornata .. –