Estoy rediseñando una aplicación que heredé que envía fotos digitales desde una computadora portátil a un servidor web. La idea es tomar fotos "en el campo" y publicarlas instantáneamente en una página web (con algunas características más sofisticadas).¿Cuál es el mejor diseño en .NET para enviar datos a través de una conexión de red no confiable (3G)?
Escenario típico
1. Las fotos se transfieren de la cámara a la computadora portátil con USB estándar.
2. Las fotos se procesan de varias maneras. (No es importante)
3. Cada foto se envía por CORREO en pequeños pedazos (~ 64 kb cada uno) utilizando una búsqueda webre a un servidor web Apache estándar donde se fusiona de nuevo.
El problema con el diseño actual es que a menudo se cuelga cuando la conexión de red no es confiable. Como estamos usando una red móvil (3G) y, a menudo, terminamos fuera de cobertura, necesito una forma de manejar esto correctamente.
Mi pregunta es si hay una mejor solución para hacer esto que no hará que la aplicación se cuelgue cuando la conexión se caiga de vez en cuando.
(Bono pregunta es cómo esto podría ser adecuadamente unidad probada, sin tener que realizar una caminata con el portátil.)
EDITAR 2008-11-24: ahora las he arreglado para crear un entorno de prueba adecuado para esto usando una combinación de NetLimiter y TMnetsim (freeware). Intenté establecer 5 kb/seg y soltar el 1% de todos los paquetes; mi aplicación aún funciona bien con el nuevo diseño.
EDITAR 2008-12-11: Solo para actualizar cómo lo hice. Creé un trabajador de fondo (como se sugiere a continuación) que se inicia cada vez que se detecta una cámara para copiar las fotos de la cámara a la PC. Luego, comencé a trabajar en otro entorno cuando los archivos llegan a la PC para cargarlos mediante una transferencia HTTP asíncrona. Definitivamente fue un dolor hacer todo bien, especialmente porque la operación debería ser "cancelable" en cualquier momento ... Pero de todos modos, ahora funciona. ¡UN GRAN AGRADECIMIENTO a todos los que me ayudaron!
Parece como si envío algunos datos y la conexión se corta, mientras que los datos están "en camino", los datos se pierden y se bloquea el hilo de carga. Preferiría rediseñar la carga completa en lugar de intentar que ese código realmente desordenado sea estable. – Christopher
Si establece un tiempo de espera, ¿eso es un honor? Ese sería mi primer puerto de escala. –