2008-09-08 12 views
6

Tome una .Net Winforms App ... mezcle en una conexión de red inalámbrica, remueva con unos pocos usuarios a los que les gusta simplemente desconectar el conector azul de vez en cuando y agregue un administrador de sistemas que decida reiniciar el servidor SQL. sin previo aviso una y otra vez solo para mantener a todos en alerta.¿Cómo gestionas tu aplicación cuando la base de datos se desconecta?

¿Cuáles son las sugerencias y estrategias para el manejo de este tipo de escenario con respecto a:

  • Control de errores - por ejemplo, es lo que envuelve cada llamada al servidor con un try/catch o hacen confía en alguna forma de Gestión de errores genéricos para gestionar esto? ¿Si es asi, como se ve?

  • Administración de aplicaciones - por ejemplo, qué deshabilitar la aplicación y no permitir que los usuarios interactúen con hasta una conexión se detecta de nuevo? ¿Qué harías?

+0

Para finalizar, utilizamos los servicios de sincronización de MS para aquellos que trabajan fuera de línea. Pero descubrimos que ejecutar más de 50 usuarios en Sync Services a la vez en un sistema grande conduce al infierno de SQL Server mientras nos esforzamos por gestionar los conflictos y la carga en el servidor. – gleng

+0

Es por eso que hemos configurado las PC estándar para uso en la oficina para que accedan directamente al SQL Server y no a través de una base de datos intermedia como SQL Compact. Gracias a todos por las respuestas. Lo que realmente estaba buscando era una idea de lo que las personas hacen en situaciones similares cuando el DB no está disponible. – gleng

Respuesta

3

La respuesta depende del tipo de su aplicación. Hay aplicaciones que pueden funcionar sin conexión: Microsoft Outlook, por ejemplo. Tales aplicaciones no tratan las excepciones de conectividad como críticas, pueden guardar su trabajo localmente y sincronizarlo más tarde. Otras aplicaciones, como los juegos en línea, tratarán el problema de comunicación como una excepción crítica y se cerrarán si se pierde la conexión.

A partir del manejo de errores, creo que debe controlar las excepciones en todas las capas en lugar de confiar en algún fragmento de código de manejo de excepciones general. La capa de su empresa debe comprender lo que sucedió en la capa inferior (capa de acceso a los datos en nuestro caso) y responder en consecuencia. La conexión perdida no debe tratarse como excepción inesperada en mi opinión. Para las buenas prácticas de administración de excepciones, recomiendo echar un vistazo al Exception Handling Application Block.

En cuanto al comportamiento de la aplicación, debe responderse a sí mismo con la siguiente pregunta "¿Mi aplicación tiene valor comercial para el cliente en estado desconectado?" En muchos casos, sería beneficioso para el usuario final continuar su trabajo en estado desconectado. Sin embargo, tal comportamiento es tremendamente difícil de implementar.

Especialmente para su escenario Microsoft desarrolló Disconnected Service Agent Application Block

0

En nuestra aplicación, dar al usuario la opción de conectarse a otro servidor, 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.

1

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

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

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

y luego Application_UnhandledExceptionUnhandledExceptionCatcher y mensajes de uso fácil visualización.

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

Depende de la aplicación, por supuesto, pero por el tipo de fallas que usted describe me gustaría cerrar la aplicación abajo.

2

No he tocado WinForms y .NET desde hace años, así que no puedo dar detalles técnicos, pero no es la respuesta de imagen lager:

primero y más importante - no se unen directamente los datos del formulario a una base de datos.

Crear una capa de datos/modelo separado que se asocie su formulario widgets para.

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

Probablemente una de las soluciones más simples en este caso sería simplemente activar/desactivar las partes de la aplicación que necesitan para interactuar con una base de datos basada en el estado de la conexión.

nivel de protección Siguiente incluiría el almacenamiento en caché de la parte del modelo de datos a nivel local y al mismo tiempo la conexión de base de datos se ha reducido, el uso de memoria caché local para su visualización y desactivación de las funciones que requieran una conexión de base de datos explícita.

Probablemente lo más complicado (que también puede proporcionar la experiencia más estable para el usuario final) es replicar la base de datos localmente y utilizar algún tipo de esquema de sincronización para mantener su copia de la base de datos sincronizada con db remota.

1

Esto también puede ser un poco demasiado mucho soporte para el escenario fuera de línea, pero ¿ha considerado el "Microsoft Sync Framework"? Incluido en el marco está el "Sync Services for ADO.NET 2.0", que permite que su aplicación llegue a una instancia local de SQL Server CE. Esto se puede sincronizar fácilmente con un servidor SQL central a través de una variedad de métodos.

Este marco de trabajo maneja el escenario fuera de línea permanente, y como dije, puede no ser apropiado para sus requisitos específicos, sin embargo, le dará a su aplicación soporte sólido fuera de línea.

0

usar algo como SQLite para almacenar datos fuera de línea hasta que la conexión está disponible.

Actualización: Creo que SQLite es la parte de atrás para Google Gears, que desde mi entendimiento hace lo que estás buscando en aplicaciones web ... aunque no sé si se puede usar en un contexto no web.

Cuestiones relacionadas