none
WCF Transacciones Distribuidas RRS feed

  • Pregunta

  • Buenas  a tod@s

    Voy a ir al grano, 

    Antecendentes:

    1.Tengo una aplicacion 3 capas, una DAL(data access layer) otra BL capa de negocio que contiene ENTIDADES y otra de presentacion en WINDOWS FORM

    2.La conexión a la base de datos esta echa con ODBC

    3.Entre las entidades se pasan un objeto Transaccion que despues de que cada entidad haga sus funciones(por ejemplo actualizar una tabla)

    se realiza un COMMIT.

    PROBLEMA , el usuario siempre ha de tener instalado el odbc 

    Queremos mediante WCF u otro medio .NET REMOTING..COM+, tener los servicios alojados por ejemplo un servicio X y otro Y, se pasen un objeto comun q tienen llamado objeto Transaccion(que contiene la conexion y el tema de la transaccion)

    Es esto posible? pasar el objecto "transaccion" entre servicios o algo parecido..

    Ah! con odbc y DB2 no funciona transactionscope

     

    Saludos! y Gracias

     

    miércoles, 24 de noviembre de 2010 10:25

Todas las respuestas

  • Hola, CarlosCC!

     

    En el siguiente link encontrarás toda la información referente al manejo de Transacciones en WCF.

    http://msdn.microsoft.com/es-es/library/ms730266.aspx

     

    Revísalo y de seguro encontrarás lo que necesitas.

     

    Bendiciones!

     

    POSDATA:  DB2 y ODBC deberían soportar TransactionScope, en el siguiente link se trata el tema y cómo lograrlo:

    http://stackoverflow.com/questions/1403946/transactionscope-wont-work-with-db2-provider


    Si la respuesta te es de utilidad, recuerda marcarla como Respuesta y/o votarla como Útil. Así colaboras a que el foro esté organizado.
    miércoles, 24 de noviembre de 2010 13:08
  • Muchas Gracias por contestar, la verdad es que ando perdido, por favor te pido que me eches un cable simplmente lee esto y me comentas cualquier cosa.

    Gracias de antemano.

    he llegado a WCF por "obligacion", dado q quieren dejar de instalar el DRIVER del odbc a los clientes. y no si si voy acertado o no...lo q tengo claro es que  sin Transacciones no podemos trabajar , por q necesitamos estar seguros de lo que se guarda

    Este es el principal motivo por el que no meto la capa DAL en los webServices, es decir, no puedo tener un WebService q actualice las almacenes y otro los pedidos sin que trabajen con LA MISMA TRANSACCION tienen q  y compartir esa transaccion

    No se si voy bien....con WCF

    Mi supuesto seria algo asi:

    Si en un formulario tengo esto (un supuesto con un poco de pseudocodigo)

    Hasta ahora

    try

    {

    EntidadPedido Pedidos

    EntidadAlmacenes Almacenes

    Transaccion trans;

    Pedidos.Actualizar(DasaSetpedidos, trans);

    almacenes.Actualizar(DasaSetAlmacen, trans);

    trans.commit();

    SI FALLA NO SE ACTUALIZA NI LOS PEDIDOS NI DESCONTAMOS LOS ARTICULOS DEL STOCK DEL ALMACEN, EN CASO CONTRARIO 

    HAGO EL COMMIT

    }

    exceptcion

    {

    Transacion.Rollback();

    }

     

    AL EXTRAER LA CAPA DATOS A UN WCF

     

    try

    {

    EntidadPedido Pedidos

    EntidadAlmacenes Almacenes

    Pedidos.Actualizar(DasaSetpedidos);

    almacenes.Actualizar(DasaSetAlmacen);

    }

    exceptcion

    {

     

    }

     

    SERVICIOS WCF

    En la EntidadPedidos se llamara al WCFPEDIDOS y en la EntidadALMACENES al WCFALMACENES, ahora bien

    COMO HAGO PARA QUE AMBOS USEN LA MISMA TRANSACCION (Doy por echo q estan alojados en un servidor remoto en la intranet) y si falla alguno se ejecute un ROLLBACK

     

     

    miércoles, 24 de noviembre de 2010 15:21
  • Hola, KarlosCC!

     

    ¿Y por qué no le dejas esa tarea a tu capa de Lógica de Negocios?

     

    Es decir:

     

    1. Desde el cliente sólo enviarías la orden de guardar el pedido.
    2. En la capa de Negocios (en el Servidor) crearías la Transacción y dentro de la misma almacenarías el pedido y a cada producto del detalle del mismo le actualizarías el saldo.

    Espero te sea de utilidad.


    Bendiciones!


    Si la respuesta te es de utilidad, recuerda marcarla como Respuesta y/o votarla como Útil. Así colaboras a que el foro esté organizado.
    miércoles, 24 de noviembre de 2010 21:18
  • Hola AlexLander,

    gracias nuevamente por contestar, desgraciadamente por razones "Externas a mi" la capa de negocios ha de estar por obligacion en el cliente. solo se baraja extraer el DAL

    Por una razon de optimizar el trabajo, ya hay mucho trabajo realizado y no lo entenderian.

    realmente el problema que tengo es EL TENER Q instalar el ____ driver ODBC para db2(as400) en cada cliente que use la aplicacion.

     

    El objetivo es que al instalar, el driver de acceso este en el programa, como la Sqlconnection...y como hasta ahora no he visto como habia pensado en extraer el DAL pero con la transaccion la cosa se complica...

     

    alguna idea?

    jueves, 25 de noviembre de 2010 10:12