¿Cómo gestionar su aplicación cuando la base de datos se queda sin conexión a internet?

StackOverflow https://stackoverflow.com/questions/49426

  •  09-06-2019
  •  | 
  •  

Pregunta

Tomar una .Net Winforms App..mezclar en un flakey conexión de red inalámbrica, revuelva con un par de usuarios a quienes les gusta simplemente tire del enchufe azul ocasionalmente y en buena medida, agregar un Administrador de Sistemas que decide reiniciar el cuadro SQL server sin advertencia de ahora y de nuevo sólo para mantener a todos en sus dedos de los pies.

¿Cuáles son las sugerencias y estrategias para el manejo de este tipo de situación en lo que respecta a :

  • Manejo de errores - por ejemplo, hacer que envuelva a todos los llamada al servidor con un Try/Catch o se basa en alguna forma de El Manejo de Error genérico para gestionar este?Si es así ¿a qué se parece?

  • Aplicación de Gestión - por ejemplo, ¿ deshabilitar la aplicación y no permitir que los usuarios para interactuar con ella hasta que un la conexión se detecta de nuevo?¿Qué haría usted?

¿Fue útil?

Solución

La respuesta depende del tipo de aplicación.Hay aplicaciones que puede trabajar fuera de línea - Microsoft Outlook, por ejemplo.Tales aplicaciones no tratar de conectividad excepciones como crítica, que puede guardar su trabajo a nivel local y sincronizar más adelante.Otra de las aplicaciones tales como juegos en línea va a tratar el problema de comunicación como excepción crítica y dejar de fumar si la conexión se pierde.

Como de manejo de errores, creo que debe de control de excepciones en todas las capas en lugar de confiar en algunos de excepción general a la manipulación de la pieza de código.La capa de negocio debe comprender lo que sucedió en la capa inferior (capa de acceso a datos, en nuestro caso) y responder en consecuencia.Se ha perdido la conexión no debe ser tratado como excepción inesperada en mi opinión.Para las buenas prácticas de las excepciones de gestión recomiendo echar un vistazo a El Manejo De Excepciones De Bloqueo De La Aplicación.

Sobre el comportamiento de la aplicación, usted debe responder de sí mismo en la siguiente pregunta: "¿tiene mi aplicación de negocio de valor para el cliente en estado desconectado?" En muchos casos, sería beneficioso para el usuario final para poder continúa su trabajo en estado de desconexión.Sin embargo, tal comportamiento tremendamente difícil de implementar.

Especialmente para el escenario de Microsoft desarrollado Desconecta El Servicio De Agente De Bloqueo De La Aplicación

Otros consejos

No he tocado WinForms y .NETO para los años ahora, así que no puedo dar los detalles técnicos, pero no es la lager foto respuesta:

Primero y principal, no se unen los datos de su formulario directamente a una base de datos.

Crear una partición de datos/modelo de la capa de enlazar su forma de widgets.

A partir de ahí, usted tiene varias opciones disponibles para usted en función del nivel de estabilidad y disponibilidad que debe proporcionar.

Probablemente uno de los más simples soluciones aquí sería simplemente activar/desactivar las partes de la aplicación que necesita para interactuar con una base de datos sobre el estado de la conexión.

El próximo nivel de protección incluyen el almacenamiento de la parte del modelo de datos a nivel local y mientras que la conexión de base de datos, usando la caché local para la visualización y la desactivación de las funciones que requieren expresamente la conexión de base de datos.

Probablemente la cosa más difíciles (que también puede proporcionar el más estable de la experiencia para el usuario final) es replicar la base de datos localmente y el uso de algún tipo de esquema de sincronización de mantener su copia de la base de datos en sync con control remoto db.

Esto puede ser un poco demasiado mucho apoyo para el escenario sin conexión, sin embargo, han considerado la "Microsoft Sync Framework"?Incluido en el marco de los "Servicios de Sincronización para ADO.NET 2.0", que permite su aplicación para golpear a un local de SQL Server CE instancia.Esto puede ser fácilmente sincronizados con una central de SQL Server a través de una variedad de métodos.

Este framework se encarga de la permanente escenario sin conexión, y como ya he dicho, puede que no sea adecuado para sus necesidades específicas, sin embargo, le dará a su aplicación sólido soporte offline.

Tenemos presente en nuestras Main() método que atrapa todas las excepciones no controladas...

Application.ThreadException += new 
System.Threading.ThreadExceptionEventHandler(UnhandledExceptionCatcher);

Thread.GetDomain().UnhandledException += new 
UnhandledExceptionEventHandler(Application_UnhandledException);

y, a continuación, Application_UnhandledException y UnhandledExceptionCatcher pantalla amigable para el usuario de los mensajes.

Además, la aplicación, a continuación, correos electrónicos, datos tales como el seguimiento de pila para los desarrolladores que pueden ser muy útiles.

Depende de la aplicación, por supuesto, pero para el tipo de errores que se describen yo iba a cerrar la aplicación.

En nuestra aplicación, le damos al usuario la opción de conectarse a otro servidor, como por ejemplo, si la conexión de base de datos falla, aparece un cuadro de diálogo diciendo que el servidor no está disponible, y que podría introducir otra dirección IP a tratar.

Usar algo como SQLite para almacenar los datos sin conexión hasta que una conexión está disponible.

Actualización:Creo que SQLite es la parte final de Google Gears, que a mi entender no lo que usted está buscando en aplicaciones web...aunque no sé si puede ser utilizado en un sin contexto web.

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