COM con System.EnterpriseServices.ServicedComponent

12/10/2004 - 17:19 por Jaimito | Informe spam
Hola compañeros...

Tengo una clase que hereda de System.EnterpriseServices.ServicedComponent,
esta clase se llama Manager y tiene algunas propiedades y un método (entre
otros) que utilizo para escribir hacer actualización e inserciones en una
base de datos. La clase Manager la idea es crearla transaccional con MTS y de
ahí el motivo de la herencia de ServicedComponent.

El método que se invoca para las actualizaciones e inserciones se llama Save.

Coloco un pequeño fragmento de código donde implemento la clase.

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim om As Manager

om = New Manager()

'configuro algunas propiedades
om.Propiedad1 = "Algo1"
om.Propiedad2 = "Algo2"
om.Propiedad3 = "Algo3"

'llamo al método para insertar información
'el método Save llama internamente a ContextUtil.SetComplete(), tras haber
'realizado cualquier actualización o inserción en la base de datos; esto no
tiene
'problema alguno, no hay inconvenientes
om.Save()

'AQUÍ!!!!!! tengo el problema
MsgBox( om.Propiedad1 )

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
En la línea del MsgBox se presenta algo que nunca había presenciado, y es
que la instancia om de la clase Manager se pierde, es decir, se vuelve a
crear un nuevo objeto o instancia de la clase Manager. Para el ejemplo
anterior, el MsgBox muestra que Propiedad1 está vacía o en blanco, cuando no
debería ser así puesto que anteriormente le había asignado "Algo1".

La clase Manager cumple con la finalidad de procesar las transacciones con
MTS, es decir, si actualizo o inserto algo en la base de datos y luego llamo
a ContextUtil.SetAbort() se hace el Rollback esperado; y si se llama
ContextUtil.SetComplete() se hace el Commit esperado. El problema radica en
que se pierde la instancia que tengo y se crea otra.

¿Este es siempre el comportamiento cuando se trabaja en .NET con COM?
¿Es posible cambiar el comportamiento?

Les agradezco su oportuna respuesta.
 

Leer las respuestas

#1 SqlRanger
12/10/2004 - 20:52 | Informe spam
No hace falta que vuelvas a repetir la pregunta. Ya te contesté la primera
vez

Saludos

Jesús López
MVP

Preguntas similares