2011-09-22 15 views
16

Estoy planeando pasar MemoryStream a través de WCF Streaming, pero parece que no funciona, pero cuando cambio ligeramente el código para pasar FileStream, está funcionando. De hecho, mi propósito es pasar una gran colección de objetos comerciales (serializables). Estoy usando basicHttpBinding. ¡Su sugerencia será muy apreciada!Cómo transferir MemoryStream a través de WCF Streaming

Editado: Los síntomas del problema es que la transmisión entrante está vacía. No hay error ni excepción.

+0

Y si está fallando, una excepción debe de haber sido lanzado. ¿Dónde puedes atraparlo? Cuál fue el mensaje de error? ¿El mensaje te da alguna pista de lo que está pasando? –

+0

Muchas gracias por sus respuestas. Publiqué esta pregunta por capricho, ya que me ha estado desesperando durante un par de días. –

Respuesta

51

No proporciona muchos detalles, sin embargo, estoy casi seguro de que sé cuál es el problema, ya que he visto que eso sucede mucho.

Si escribe algo en un MemoryStream para devolverlo como resultado de una operación de servicio WCF, debe restablecer manualmente la secuencia a su comienzo antes de devolverla. WCF solo leerá la secuencia desde la posición actual, por lo tanto devolverá una secuencia vacía si esa posición no se ha restablecido.

Eso al menos explicaría el problema que está describiendo. Espero que esto ayude.

Aquí algunos ejemplos de código:

[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

Muchas gracias ... Literalmente salvas el día ... –

Cuestiones relacionadas