2010-02-04 17 views
5

Tengo una aplicación C# con NHibernate que debe realizar algunas operaciones sobre una base de datos de SQL Server.Mecanismo de bloqueo entre procesos en varias máquinas

Nuestro objetivo es ejecutar esta aplicación varias veces en la misma máquina y también en otras máquinas.

En realidad, la aplicación inserta una fila en una tabla SQL y comprueba si la primera fila con fecha mínima es la fila con el PID correcto y el nombre de la máquina para que la aplicación configure el bloqueo y haga el trabajo.

Tenemos problemas con esta lógica porque la aplicación también debe eliminar el bloqueo de otras aplicaciones si la aplicación que conserva el bloqueo se cuelga.

¿Alguna pista sobre cómo cambiar la arquitectura de la cerradura?

El problema es que la aplicación puede ejecutarse en varias máquinas.

Respuesta

2

¿Qué hay de la gestión de la cerradura en la base de datos? Puede tener una tabla/procedimiento almacenado, donde cada instancia en ejecución se registra, obtiene una identificación única y usa el procedimiento almacenado para hacer el bloqueo & gratis. (La misma técnica que la prevención de múltiples inicios de sesión para un solo usuario de varias máquinas).

+0

Prefiero no usar StoredProcedures porque en mi configuración de Nhibernate no tengo ninguno. –

+0

Me refería a implementar esto fuera del alcance de los datos estándar, como un módulo separado en su totalidad. – Amirshk

2

De cualquier

  • tener un proceso (servidor) que gestiona las cerraduras - todos los clientes registrados y solicitar cerraduras de este servidor.
  • Pessimistic offline locking

vez implementado en ambos sentidos.

Los bloqueos sin conexión pueden funcionar con bases de datos, pero existe la posibilidad de que pueda introducir agitación si hay demasiados procesos esperando constantemente en el bloqueo (aunque un servidor de base de datos decente debería almacenar información). Además, asegúrese de utilizar el nivel de aislamiento de transacción ReadCommited al hacer cualquier cosa con esa tabla y prepárese para los puntos muertos

+0

Lo intentaré ... –

Cuestiones relacionadas