2008-11-26 4 views
1

Lorsque je crée une classe, dire ClassA, qui hérite de MarshalByRefObject puis utilisez la méthode RemotingServices.Marshal pour créer un objet ObjRef-t-il sérialiser les tous les domaines privés de ClassA?MarshalByRefObject et sérialisation

Merci

Répondre

3

n ° L'idée de MarshalByRefObject est qu'il ne pas tous être sérialisé à des fins de communication à distance. Au lieu de cela, le CLR génère ce que l'on appelle un proxy transparent dans ce scénario. Cela s'appelle Transparent parce qu'il ressemble à ClassA et agit comme tel, mais en réalité ce n'est pas vraiment ClassA. Tous les appels dans une instance de ClassA sont rassemblés à travers les limites de l'accès distant dans l'AppDomain d'origine où ClassA a été créé.

EDIT: répondre à d'autres clarifications.

Lorsque vous transmettez des données à un MarshalByRefObject dans ce scénario, vous devez prendre en compte le type de données. Essentiellement dérive de MarshalByRefObject ou ce n'est pas le cas. S'il dérive de MarshalByRefObject alors le paramètre sera passé en proxy. Si elle ne dérive pas de MarshalByRefObject, elle sera sérialisée, passée à travers la limite AppDomain sous la forme d'une série d'octets, puis désassemblée dans l'AppDomain cible.

Votre scénario répertoriait des chaînes qui ne sont pas MarshalByRef (généralement je les appelle MarshalByValue mais c'est purement conventionnel). Ils seront donc sérialisés lorsqu'ils seront passés à travers votre frontière d'accès distant.