¿Es posible tener dos aplicaciones que usen las mismas bases de datos en una transacción distribuida sin tener que implementar un administrador de recursos?

Tenemos una aplicación .Net que inicia una transacción usando NHibernate y modifica datos en la base de datos X. En medio de esta transacción emitimos llamadas a un WebService (.Net también), que también modifica la base de datos X y posiblemente modifica otras bases de datos.

¿Hay alguna forma de compartir esta transacción entre las dos aplicaciones sin tener que escribir un administrador de recursos para el servicio web? (es la única forma que veo)

¿Cómo puede la aplicación que inicia la transacción conocer (y controlar) las transacciones de la base de datos que inicia el WebService?

preguntado el 08 de noviembre de 11 a las 14:11

1 Respuestas

Si está utilizando WCF, entonces es bastante simple. Todo lo que tienes que hacer es colocar el TransactionFlowAttribute en los métodos en su contrato que desea que fluya una transacción a través de él.

Entonces, crearías un TransactionScope instancia alrededor de la llamada a la base de datos y la llamada al servicio web en el cliente, y la transacción se coordinará entre su llamada a la base de datos y el servicio web.

IIRC, necesita el servicio Distributed Transaction Controller en ejecución para coordinar la transacción.

Si está no usando WCF, entonces sí, tendrá que crear un administrador de recursos. La mejor manera es probablemente tener un administrador de recursos específico para los dos recursos que está tratando de administrar. en la transacción específica y use transacciones compensatorias para confirmar / deshacer según el estado de las respuestas de los recursos individuales que participan en la transacción.

respondido 09 nov., 11:01

Desafortunadamente, no estamos usando WCF porque todavía usamos la versión 2.X de .Net framework en el lado del consumidor y actualizar el servicio web implicaría comprar licencias para la nueva versión de una herramienta que usamos, por lo que esta solución no es exactamente preferible . ;) Echaré un vistazo a las transacciones de compensación. Gracias por el consejo. - Ygormutti

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.