Pregunta

Estoy creando una aplicación móvil en VB.NET (marco compacto), y me pregunto cuál es la mejor manera de abordar las posibles interacciones sin conexión en el dispositivo. Básicamente, los dispositivos tienen celular y 802.11, pero aún pueden estar fuera de línea (donde hay una mala recepción, etc.). Un conductor escaneará las cajas cuando salgan de su camión, y quiero actualizar la nueva ubicación, inmediatamente si hay señal de red, o en cola si está fuera de línea y se maneja más tarde. Sin embargo, me hizo pensar en cómo manejar la conexión sin conexión en general.

  • ¿Guardo en el caché tantos datos como pueda para usarlos si está fuera de línea? ¿Esencialmente, cada dispositivo tendría una copia de los datos de producción (relevantes)? ¿O es mejor deshabilitar cierta funcionalidad cuando está fuera de línea, para evitar el dolor de cabeza de la sincronización más adelante? Sé que esta es una pregunta muy específica que depende de mi aplicación, pero tengo curiosidad por ver si otros han tomado esta ruta.
  • ¿Construyo la aplicación para que actúe como si estuviera siempre fuera de línea, enviando todo a una cola local de clases que es propiedad de una clase local (esencialmente absteniéndose de lo que está en línea / fuera de línea), y luego hago que la clase envíe cosas a El servidor como puede? ¿Qué pasa con las búsquedas de datos? ¿Cómo se pueden manejar en un " Semi-live " moda?
  • ¿O debería hacer que la aplicación intente enviar solicitudes al servidor directamente, en tiempo real, y manejarlas si la solicitud falla? Puedo ver un problema potencial de hacer que el usuario espere el tiempo de espera, pero ¿es esta la forma más confiable de hacerlo?

No estoy buscando una solución específica, sino solo historias de cómo los desarrolladores logran esto con la mejor experiencia de usuario posible, con un enlace a un manual de instrucciones o algo más a considerar o algo por el estilo. ¡Gracias por sus sugerencias sobre esto!

¿Fue útil?

Solución

No podemos darle una respuesta definitiva porque no hay " derecha " respuesta que se ajuste a todos los escenarios de uso. Por ejemplo, si está utilizando SQL Server en el back-end y SQL CE localmente, siempre puede configurar la replicación de mezcla y hacer que el motor de datos maneje todo esto por usted. Eso es bastante limpio. Usando el bloque de aplicación fuera de línea podría resolverlo. Usar almacenar y reenviar podría ser una opción.

Puede almacenar localmente y luego realizar su propia sincronización con una conexión directa, el servicio web del servicio WCF se usa cuando se detecta una red. Podría usar MSMQ para la entrega.

En lo que tienes que pensar no es en lo que " derecha " Así es, pero cómo su implementación afectará la usabilidad de la aplicación. Si desactiva las funciones debido a la falta de conectividad, ¿la aplicación aún es utilizable? Si tienes datos obsoletos, ¿es eso un problema? Tal vez sea necesario transferir algunos datos críticos cuando tenga GSM / GPRS (que normalmente no es gratis) y se hará más cuando tenga 802.11. Tal vez pueda correr todo el día con tablas de búsqueda bajadas por la mañana y cargar solo transacciones, con el dispositivo rastreando los cambios realizados.

Básicamente, realmente depende de cómo se use, la naturaleza de los datos, la importancia de las transacciones de datos entre los dispositivos de campo, el efecto de la latencia de los datos y probablemente otros factores que no se me ocurren.

Entonces, el primer paso es determinar cómo se debe usar la aplicación, luego determinar la infraestructura y la arquitectura para proporcionar la conectividad y el acceso a los datos requerido.

Otros consejos

No lo he usado yo mismo, pero ¿has buscado en " store and forward " Capacidades de la FQ? Puede satisfacer sus necesidades. Creo que utiliza un buzón de Exchange como una cola de mensajes para enviar paquetes SOAP desde y hacia el dispositivo.

La mejor manera de abordar esto es trabajar siempre sin conexión, luego usar las colas de mensajes para manejar el envío de cambios hacia y desde el dispositivo. Cuando el controlador marca algo como entregado, por ejemplo, actualice el artículo como entregado en su tienda local y también coloque un mensaje en una cola de salida para indicar al servidor que se entregó. Cuando la conexión esté activa, envíe los elementos en cola al servidor y reciba todos los mensajes que se hayan puesto en cola desde el servidor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top