Was ist die Hauptverwendung von MarshalByRefObject?

93

Was ist der Zweck von MarshalByRefObject?

user496949
quelle

Antworten:

107

Remoting; Dies bedeutet, dass zwischen AppDomains oder Computern das Objekt nicht serialisiert und übertragen, sondern an einem Ende verbleibt und am anderen ein Proxy erstellt wird. Alle Methodenaufrufe an den Proxy werden abgefangen und der Aufruf wird als RPC- Wiki ( msdn) übertragen , wodurch die Methode auf dem anderen Computer ausgeführt wird (normalerweise werden die Argumente und der Rückgabewert serialisiert).

Hinweis: Dies kann zu unerwartet "gesprächigen" Schnittstellen führen. Der Objekt- / Proxy- / RPC-Ansatz ist jetzt Ansätzen mit einer expliziten Dienstgrenze weniger vorzuziehen . Microsoft empfiehlt jetzt WCF- Wiki , msdn anstelle von Remoting.

Marc Gravell
quelle
5
@pavel - es ist ziemlich komplex, aber zumindest ist uns klar, wo die teuren Anrufe sind. Wenn Sie Bandbreite meinen , gibt es Möglichkeiten, dies zu verringern.
Marc Gravell
1
Manchmal möchten Sie keine expliziten Grenzen, wie in Szenarien, die für processdomain.codeplex.com aufgeführt sind. Stattdessen möchten Sie Transparenz.
Andrew Savinykh
1
in c # sind alle Referenztypen standardmäßig Marschall oder wie man es weiß, soory, wenn es eine dumme Frage ist, nur neu mit diesem Konzept @MarcGravell
Ehsan Sajjad
1
@Ehsan nein, sie sind standardmäßig Marschall-by-Val. Marshalling gilt jedoch nur beim Überschreiten von App-Domain-Grenzen, sodass es selten vorkommt, dass es überhaupt relevant ist. Um Marschall-für-Schiedsrichter zu sein, muss es MashalByRefObject
Marc Gravell
28

Eine weitere wichtige Verwendung MarshalByRefObjectist die Implementierung von AOP über Remoting-Senkenketten.

Wenn Sie ein Objekt haben, von dem es abgeleitet ist ContextBoundObject(von dem es selbst stammt MarshalByRefObject), können Sie es in einem separaten Kontext innerhalb derselben AppDomain instanziieren und die Kommunikation zwischen Objekten automatisch über das Remoting-Proxysystem durchführen. So können Sie benutzerdefinierte Senken in die Remoting-Senke einstecken. Kette.

Auf diese Weise können Sie letztendlich Methodenaufrufe für Ihre Objekte "dekorieren" und Querschnittsdienste wie Protokollierung und Sicherheit usw. implementieren.

Dean Chalk
quelle
Denken Sie nur an diese - Wie können wir solche Methodenaufrufe für MBR-Objekte dekorieren? Werden diese Dekorationen in Bezug auf die Leistung kosten?
SO19
9

Die grundlegende Verwendung dient der Unterstützung des Zugriffs auf Objekte zwischen zwei Appdomains. Diese Appdomains können sich über Remoting auf demselben Computer oder auf den verschiedenen Computern befinden.

Siehe hier

TalentTuner
quelle
5

Jedes Objekt außerhalb der Anwendungsdomäne der Aufruferanwendung sollte als Remote-Objekt betrachtet werden. Ein Remote-Objekt, das von MarshalByRefObjectClass abgeleitet werden soll . Jedes Objekt kann durch Ableiten von in ein Remote-Objekt geändert werden MarshalByRefObject. Objekte ohne Erbe von MarshalByRefObjectwerden als nicht entfernbare Objekte bezeichnet.

Arvind Singh
quelle