Problemas con Reflection

11/02/2004 - 14:27 por Marcelo Belén | Informe spam
Hola a todos:

Tengo que crear dinamicamente una Web Refercence, y
luego cargar clases que estan en esa referencia por lo que
uso reflection para cargarla, Ya se el nombre y demases,
pero no las carga, pero sin tocar el codigo si vuelvo a
ejecutar como la web reference ya estaba creada no la
vuelvo a crear y en ese momento si encuentra todas las
clase, creo que es algo asi como refrescar en tiempo de
ejecucion. pero no he encontrado la forma de hacerlo.



Gracias a todos,
Marcelo.

Preguntas similare

Leer las respuestas

#1 Alejandro Mezcua
11/02/2004 - 18:09 | Informe spam
Hola, Marcelo.

Si entiendo bien lo que propones, dices que te gustaría que al cambiar la
firma del servicio Web (nuevos métodos, otros parámetros, etc) por
reflection pudieses acceder los nuevos elementos.

Si es este tu problema, aunque en principio parece que esto sería así de
sencillo, no es así. Si miras lo que hace Visual Studio, realmente está
leyendo el WSDL del servidor y creando una clase local (reference.cs)
asociada a la referencia Web (el proxy) que, una vez creada, es estática.
Cuando actualizas la referencia en el proyecto simplemente estás volviendo a
leer el WSDL y, si es diferente del anterior, vuelves a generar
reference.cs.

Una vez compilado el proyecto, reference.cs es estático, con lo que mediante
reflection sólo puedes leer el contenido de la instancia del proxy.

Dispones de una utilidad, wsdl.exe, que te permite generar clases
dinámicamente. En principio la podrías usar en tu aplicación para generar el
código del WSDL dado, compilarlo, generar el assembly y usarlo en tu código
en tiempo de ejecución, donde si estarían las modificaciones obtenidas
mediante reflection.

No se si es este exactamente tu caso o no, pero si lo es y trabajas en ello
coméntanos cómo te va ;-)

Un saludo,

Alejandro Mezcua
MVP .NET
Zaltor Soluciones Informáticas

"Marcelo Belén" wrote in message
news:e57001c3f0a2$d1059cc0$
Hola a todos:

Tengo que crear dinamicamente una Web Refercence, y
luego cargar clases que estan en esa referencia por lo que
uso reflection para cargarla, Ya se el nombre y demases,
pero no las carga, pero sin tocar el codigo si vuelvo a
ejecutar como la web reference ya estaba creada no la
vuelvo a crear y en ese momento si encuentra todas las
clase, creo que es algo asi como refrescar en tiempo de
ejecucion. pero no he encontrado la forma de hacerlo.



Gracias a todos,
Marcelo.
Respuesta Responder a este mensaje
#2 Anonimo
11/02/2004 - 20:56 | Informe spam
Alejandro, gracias por la mano.

En nuestro caso ya tenemos resuelta la generacíón del
Proxy del WS. Esto lo hacemos con el método
AddWebReference, que es una version programática (del
namespace DTE) del agregado de referencias web mediante
Visual Studio. Otra vía posible seria con el utilitario
wsdl.exe que tu comentás, y luego generando una DLL a
partir de el.
El efecto de ambas es el mismo, creo.

El problema particular nuestro es que si bien esta
referencia queda visiblemente agregada, debemos detener la
ejecucion y recompilar para que se haga efectiva.

Resumiendo: ¿Cómo se recompila una assembly en tiempo de
ejecución, de modo que los cambios queden reflejados en
esa misma corrida, y no en la siguiente?

desde ya gracias.


Hola, Marcelo.

Si entiendo bien lo que propones, dices que te gustaría


que al cambiar la
firma del servicio Web (nuevos métodos, otros parámetros,


etc) por
reflection pudieses acceder los nuevos elementos.

Si es este tu problema, aunque en principio parece que


esto sería así de
sencillo, no es así. Si miras lo que hace Visual Studio,


realmente está
leyendo el WSDL del servidor y creando una clase local


(reference.cs)
asociada a la referencia Web (el proxy) que, una vez


creada, es estática.
Cuando actualizas la referencia en el proyecto


simplemente estás volviendo a
leer el WSDL y, si es diferente del anterior, vuelves a


generar
reference.cs.

Una vez compilado el proyecto, reference.cs es estático,


con lo que mediante
reflection sólo puedes leer el contenido de la instancia


del proxy.

Dispones de una utilidad, wsdl.exe, que te permite


generar clases
dinámicamente. En principio la podrías usar en tu


aplicación para generar el
código del WSDL dado, compilarlo, generar el assembly y


usarlo en tu código
en tiempo de ejecución, donde si estarían las


modificaciones obtenidas
mediante reflection.

No se si es este exactamente tu caso o no, pero si lo es


y trabajas en ello
coméntanos cómo te va ;-)

Un saludo,

Alejandro Mezcua
MVP .NET
Zaltor Soluciones Informáticas

"Marcelo Belén"


wrote in message
news:e57001c3f0a2$d1059cc0$
Hola a todos:

Tengo que crear dinamicamente una Web Refercence, y
luego cargar clases que estan en esa referencia por lo




que
uso reflection para cargarla, Ya se el nombre y demases,
pero no las carga, pero sin tocar el codigo si vuelvo a
ejecutar como la web reference ya estaba creada no la
vuelvo a crear y en ese momento si encuentra todas las
clase, creo que es algo asi como refrescar en tiempo de
ejecucion. pero no he encontrado la forma de hacerlo.



Gracias a todos,
Marcelo.




.

Respuesta Responder a este mensaje
#3 Leonardo Moreno Forero
11/02/2004 - 21:59 | Informe spam
Hola Marcelo,

Con las clases Microsoft.CSharp.Compiler y
Microsoft.CSharp.CSharpCodeProvider puedes generar y compilar código en C#.

Atentamente,

Leonardo Moreno Forero
MCP - MCSD
Bogotá - Colombia


escribió en el mensaje
news:eebc01c3f0d9$25866500$
Alejandro, gracias por la mano.

En nuestro caso ya tenemos resuelta la generacíón del
Proxy del WS. Esto lo hacemos con el método
AddWebReference, que es una version programática (del
namespace DTE) del agregado de referencias web mediante
Visual Studio. Otra vía posible seria con el utilitario
wsdl.exe que tu comentás, y luego generando una DLL a
partir de el.
El efecto de ambas es el mismo, creo.

El problema particular nuestro es que si bien esta
referencia queda visiblemente agregada, debemos detener la
ejecucion y recompilar para que se haga efectiva.

Resumiendo: ¿Cómo se recompila una assembly en tiempo de
ejecución, de modo que los cambios queden reflejados en
esa misma corrida, y no en la siguiente?

desde ya gracias.


Hola, Marcelo.

Si entiendo bien lo que propones, dices que te gustaría


que al cambiar la
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida