2008-11-06 4 views
1

In .Net Activator.GetObject (Type de type, chaîne de caractères, données d'objet) renvoie un proxy à l'objet. Je suppose que ce proxy hérite de MarshalByRefObject et peut être envoyé à travers AppDomains. Ai-je raison?Activator.GetObject - MarshalByRefObject

Dans mon application, je crée un objet dans le domaine d'application A et l'utilise comme domaine B. Les membres de l'objet sont des objets proxy créés avec Activator.GetObject(). Donc, quand je suis dans AppDomain B, j'ai un proxy transparent à l'objet créé dans l'appdomain A. Lorsque j'essaie d'exécuter un appel de la méthode sur les objets proxy, je cours dans les erreurs. Par exemple, je crée un objet Connection dans App Domain B. J'ai le proxy transparent pour l'objet Connection dans App Domain A. Je me trompe lorsque j'essaye de faire un appel comme ça depuis AppDomain A. ConnectionObject .SecurityProxy.GetSecurityAccount(). ressemble au problème. Lorsque j'essaie de passer un appel comme celui ci-dessus, il tente de créer à nouveau SecurityProxy dans AppDomain A au lieu de transférer l'appel à AppDomain B. Le proxy de sécurité a déjà été créé dans AppDomain B lorsque la connexion objet a été créé.

Pourriez-vous s'il vous plaît m'aider à comprendre ce que je fais mal?

Cordialement, Anil.

+0

Pourquoi utilisez-vous la méthode GetObject avec une URL pour communiquer entre deux domaines d'application? Créer un objet à partir de l'autre domaine d'application peut être fait avec CreateInstance. En outre, pouvez-vous spécifier les erreurs dont vous parlez? –

Répondre

1

En supposant que SecurityProxy est une propriété sur ConnectionObject ...

Vous avez affaire avec le proxy ConnectionObject dans les appels de domaine A. Méthode sont transmis au domaine B, où ils sont exécutés, et les résultats sont retournés à domaine A.

Une propriété est une astuce de compilateur. Il fait que deux méthodes, get_X et set_X, semblent être un champ. Ainsi, lorsque vous appelez "ConnectionObject.SecurityProxy", vous appelez une méthode qui renvoie une instance de SecurityProxy à travers la limite de l'appdomaine.

Vous devez faire l'une des deux choses suivantes: Créer et déplier une instance de SecurityProxy et la transmettre à ConnectionObject, ou transformer ConnectionObject en une façade qui expose uniquement des méthodes et renvoie uniquement des types/prend des arguments que vous savez limites de l'appdomain.

+0

wow, vieille question. – Will

Questions connexes