Quelle est l'utilisation principale de MarshalByRefObject?

93

Quel est le but de MarshalByRefObject?

user496949
la source

Réponses:

107

À distance; cela signifie qu'entre les AppDomains ou les machines, plutôt que de sérialiser et de transférer l' objet , l'objet reste à une extrémité et un proxy est créé à l'autre. Tous les appels de méthode au proxy sont interceptés et l' appel est transmis en tant que wiki RPC , msdn , provoquant l'exécution de la méthode sur l'autre machine (généralement en sérialisant les arguments et la valeur de retour).

Remarque: cela peut conduire à des interfaces "bavardes" inattendues. L'approche objet / proxy / RPC est désormais moins préférable aux approches avec une limite de service explicite ; Microsoft recommande maintenant le wiki WCF , msdn au lieu de la communication à distance.

Marc Gravell
la source
5
@pavel - c'est assez complexe, mais au moins nous savons où sont les appels coûteux. Si vous parlez de bande passante , il existe des moyens d'atténuer cela.
Marc Gravell
1
Parfois, vous ne voulez pas de limites explicites, comme dans les scénarios répertoriés pour processdomain.codeplex.com Au lieu de cela, vous voulez la transparence.
Andrew Savinykh
1
en c # tous les types de référence sont marshal par défaut ou comment le savoir, alors si c'est une question idiote, juste nouveau avec ce concept @MarcGravell
Ehsan Sajjad
1
@Ehsan non, ils sont marshal par val par défaut. Cependant, le marshalling ne s'applique que lors du franchissement des limites du domaine d'application, il est donc rare qu'il soit même pertinent. Pour être maréchal par référence, il doit hériter de MashalByRefObject
Marc Gravell
28

Une autre utilisation importante de MarshalByRefObject est pour implémenter AOP via des chaînes de puits distantes.

Si vous avez un objet qui dérive de ContextBoundObject (dont il dérive lui-même MarshalByRefObject), vous pouvez l'instancier dans un contexte séparé au sein du même AppDomain et faire en sorte que les communications entre les objets passent automatiquement par le système proxy distant - vous permettant de brancher des récepteurs personnalisés dans le récepteur distant- chaîne.

Cela vous permet finalement de `` décorer '' les appels de méthode à vos objets et de mettre en œuvre des services transversaux, tels que la journalisation et la sécurité, etc.

Dean Chalk
la source
Juste en pensant à ces derniers - Comment pourrions-nous décorer de tels appels de méthode aux objets MBR? Ces décorations coûteront-elles en termes de performances?
SO19
9

son utilisation de base est de prendre en charge l'accès des objets entre deux domaines d'application et ces domaines d'application peuvent être sur le même ordinateur ou dans les différents ordinateurs via la communication à distance.

Vois ici

TalentTuner
la source
5

Tout objet en dehors du domaine d'application de l'application appelante doit être considéré comme un objet distant. Un objet distant qui doit être dérivé de MarshalByRefObjectClass. Tout objet peut être transformé en objet distant en le dérivant MarshalByRefObject. Les objets sans hériter de MarshalByRefObjectsont appelés objets non distants .

Arvind Singh
la source