2011-03-01 9 views
5

Mi proyecto WCF utiliza MtoM y streaming de, y establecer el MaxBytesPerRead a 32K (el cliente y el servidor), pero cuando corro¡Flujos de WCF en trozos de 4K!

read = fs.read(buffer, 0, buffer.length) 

que no me permite leer más de 4096 bytes (4k) a la vez (el buffer 32K no se llena-está acolchado con ceros)

¿Hay alguna manera de que pueda transmitir mi archivo de varios megabytes en fragmentos mayores a 4K (por favor diga sí) ???

+1

¿Simplemente cree que tiene un problema de rendimiento o realmente lo midió? Esa lectura() devuelve solo 4K en el momento no dice nada sobre el tamaño del paquete en la red, el retraso o el rendimiento. Hay muchos búferes y capas entre su lectura() y la red. – Codo

+0

@Codo: De acuerdo, pero sería bueno saber por qué los búferes de 32K no funcionan ... 4K parece realmente pequeño. –

+2

Esto puede proporcionar algo de información: http://stackoverflow.com/questions/451376/file-download-through-wcf-slower-than-through-iis –

Respuesta

2

4096 es el tamaño predeterminado para el búfer de lectura en un FileStream, que supongo que es lo que está devolviendo. No estoy seguro de cómo le afecta el límite 4k, pero su alternativa es leer todo el archivo en un MemoryStream y enviarlo de esa manera.