2012-10-10 13 views
6

SignalR pierde muchos mensajes cuando transfiero trozos de bytes del cliente sobre el servidor al cliente (o de cliente a servidor, o de servidor a cliente).¿Cómo puedo transferir bytes en fragmentos a los clientes?

Leí el archivo en una secuencia y lo envié a través de un concentrador o conexión persistente a otro cliente. Esto funciona muy rápido, pero siempre hay mensajes perdidos o perdidos.

¿Cómo puedo transferir archivos grandes (en fragmentos o no) de cliente a cliente sin perder mensajes?

Respuesta

5

Como señala @dfowler, no es la tecnología adecuada para el trabajo. Lo que recomendaría hacer es enviar un mensaje que indique que hay un archivo para descargar que incluye el enlace y luego puede descargar ese archivo usando solicitudes GET estándar contra archivos estáticos o algún servicio web escrito con ASP.NET WebAPI.

4

SignalR no es para transferencia de archivos, es para enviar mensajes.

4

¿Por qué no es la tecnología correcta? Si un cliente necesita enviar algunos datos a un concentrador de señalR, debe poder pasar la conexión de señalR sin requerir material adicional.

De hecho, funciona bien al enviar una matriz de bytes, al menos para mí, sin embargo, me encontré con problemas similares al transferir trozos.

Quizás pueda hacer algunas pruebas para verificar si el orden en que envía los trozos es el mismo que en el orden en que se recibieron.

ACTUALIZACIÓN

Hice una prueba a mí mismo y en mi caso, el orden era de hecho el problema. Se modificó el método hub que recibe los fragmentos para aceptar un parámetro de orden que luego utilizo para reconstruir el conjunto de bytes al final y funciona bien. Habiendo dicho esto, ahora entiendo que esto no funcionaría bien con grandes transferencias de archivos.

En mi caso, no necesito transferir grandes cantidades de datos, solo quería dar a mi UI una indicación del progreso, requiriendo que los datos se envíen en fragmentos.

+0

¿Tiene un código de muestra para eso? ¿Cómo estás obteniendo los trozos? Gracias – user1331889

Cuestiones relacionadas