2010-08-01 18 views
5

En mi caso, quiero ejecutar un método en un dominio de aplicación separado. ¿Cuántas maneras diferentes podría tomar para lograr esto?¿Cómo ejecutar un método en un dominio de aplicación separado?

Sobre todo, tengo la siguiente pregunta:

  • ¿Puedo cargar un ensamblado en un dominio de aplicación y ejecutar su método en el dominio de aplicación B?
  • Parece que lo logro con AppDomain.DoCallBack Method y CrossAppDomainDelegate. Simplemente no puedo entender cómo podría tener sentido tener el ensamblado y el método en diferentes AppDomains. ¿Se vuelve a cargar de la misma manera en otro AppDomain para ejecutar el método?

Respuesta

5

Para ejecutar código en un dominio de aplicación separado, el ensamblado que contiene ese código debe cargarse en ese dominio de aplicación. Desde allí, puede llamar a un método en el segundo dominio de aplicación de su dominio de alojamiento mediante la reflexión o los métodos "CreateInstance" en la clase AppDomain.

Tenga en cuenta que los AppDomains son límites difíciles. Para comunicarse a través de los límites de AppDomain, deberá usar la comunicación remota o un verdadero mecanismo IPC-ish.

Esto es un poco anticuado, pero creo que todavía se aplica. http://blogs.msdn.com/b/suzcook/archive/2003/06/12/57169.aspx

Suzanne Cook tenía una serie de publicaciones relacionadas con este tema, por lo que puede valer la pena examinar sus archivos un poco.

Consulte la familia de métodos "CreateInstance" en la clase AppDomain. En el pasado he usado CreateInstanceFromAndUnwrap() bastante para este tipo de situación.

En cuanto a su pregunta sobre cuántas maneras hay para hacer esto ... Um, muchos, pero depende mucho de la situación exacta y de los objetos que tenga a mano.

1

Añadiendo a la respuesta correcta de Rob, quiero mencionar que cualquier intento de llamar sin usar la reflexión hará que el ensamblado se cargue en su AppDomain llamante, que bien podría ser lo que está tratando de evitar.

Cuestiones relacionadas