actualizar ArrayList por remoting

03/02/2005 - 17:46 por Miguel Arias Fernández | Informe spam
Buenas:

Tengo un ligero problema.

Instancio una clase en remoto (lógicamente la clase está marcada como
MarshalByRefObject) y uno de sus atributos es un ArrayList.

Se crea un proxy con el servidor (IIS en otra máquina) y puedo modificar
cualquiera de sus atributos (integer, string, etc) y cuando regreso el
objeto al servidor estos permanecen modificados.

El problema es que si modifico un valor del ArrayList o añado un valor esos
cambios no permanecen.

¿Alguien sabe que tengo que hacer para que los cambios efectuados en
elArryList en el cliente se mantengan?


Un saludo y gracias, Miguel
 

Leer las respuestas

#1 pablo crosio
04/02/2005 - 00:59 | Informe spam
hola!

el problema que estas teniendo se debe a lo siguiente:

en un objeto MBR cuando se accede a un campo de instancia en realidad se
serializa el campo desde el servidor al cliente cuando se consulta, y se
serializa nuevamente desde el cliente al servidor cuando se actualiza el
mismo.

pero existe una diferencia si el campo es de valor (int, bool) o de
referencia (ArrayList)

cuando se consulta el campo no deberias tener demasiados problemas puesto
que cuando el sistema remoting detecta la consulta al mismo realiza la
serializacion de los datos; aca funciona todo igual y sin problemas.

pero cuando actualizas el campo, en realidad el sistema remoting solamente
serializa (o refleja los cambios en el servidor) si se actualiza el valor
mismo para los tipos de valor o la referencia para los tipos por referencia.

entonces si tenes un ArrayList solamente se reflejan los cambios en el
servidor cuando modificas la referencia en el cliente y no alguno de sus
elementos o cuando agregas elementos

por ejemplo si tu objeto remoto se llamara OR y el campo ArrayList AL,
cuando haces:

AL[0] = elemento

o

AL.Add(elemento)

aca no estas modificando la referencia al ArrayList, el sistema remoting no
toma en cuenta este tipo de cambios para serializarlo al servidor.

ahora bien si haces:

AL = new ArrayList()

o

AL = AL2 (donde AL2 es un ArrayList definido en el cliente)

aqui si se refleja el cambio en el servidor y lo que pasa es que se
serializa TODO el ArrayList y sus elementos al servidor para actualizarlo

una solucion que podrias adoptar es definir un ArrayList temporal en el
cliente, trabajar sobre el mismo y luego asignar la referencia del mismo al
ArrayList del objeto remoto:

ArrayList AL_cliente;
AL_cliente = OR.AL;

trabajar sobre AL_cliente .

OR.AL = AL_cliente;


espero te sirva

salu2!!

pablo


"Miguel Arias Fernández" escribió:

Buenas:

Tengo un ligero problema.

Instancio una clase en remoto (lógicamente la clase está marcada como
MarshalByRefObject) y uno de sus atributos es un ArrayList.

Se crea un proxy con el servidor (IIS en otra máquina) y puedo modificar
cualquiera de sus atributos (integer, string, etc) y cuando regreso el
objeto al servidor estos permanecen modificados.

El problema es que si modifico un valor del ArrayList o añado un valor esos
cambios no permanecen.

¿Alguien sabe que tengo que hacer para que los cambios efectuados en
elArryList en el cliente se mantengan?


Un saludo y gracias, Miguel



Preguntas similares