Qual è l'uso principale di MarshalByRefObject?


93

Qual è lo scopo di MarshalByRefObject?

Risposte:


107

Remoting; significa che tra AppDomain o macchine, invece di serializzare e trasferire l' oggetto , l'oggetto rimane a un'estremità e viene creato un proxy all'altra. Tutte le chiamate al metodo al proxy vengono intercettate e la chiamata viene trasmessa come wiki RPC , msdn , provocando l'esecuzione del metodo sull'altra macchina (tipicamente serializzando gli argomenti e il valore di ritorno).

Nota: questo può portare a interfacce inaspettatamente "loquaci". L'approccio oggetto / proxy / RPC è ora meno preferibile agli approcci con un limite di servizio esplicito ; Microsoft ora consiglia WCF wiki , msdn invece di remoting.


5
@pavel - è abbastanza complesso, ma almeno è chiaro dove sono le chiamate costose. Se intendi larghezza di banda , ci sono modi per mitigarla.
Marc Gravell

1
A volte non vuoi limiti espliciti, come negli scenari elencati per processdomain.codeplex.com Invece vuoi la trasparenza.
Andrew Savinykh

1
in c # tutti i tipi di riferimento sono marshal per impostazione predefinita o come saperlo, soory se è una domanda stupida, solo nuovo con questo concetto @MarcGravell
Ehsan Sajjad

1
@ Ehsan no, sono marshal-by-val per impostazione predefinita. Il marshalling si applica solo quando si attraversano i confini del dominio dell'app, quindi è raro che sia persino rilevante. Per essere marshal-by-ref, deve ereditare MashalByRefObject
Marc Gravell

28

Un altro uso importante di MarshalByRefObject è per implementare AOP tramite remoting sink-chain.

Se hai un oggetto che deriva da ContextBoundObject(che a sua volta deriva daMarshalByRefObject ), è possibile crearne un'istanza in un contesto separato all'interno dello stesso AppDomain e fare in modo che le comunicazioni tra gli oggetti passino automaticamente attraverso il sistema proxy Remoting, consentendo di collegare sink personalizzati al sink Remoting- catena.

Questo in definitiva ti consente di "decorare" le chiamate ai metodi dei tuoi oggetti e implementare servizi trasversali, come la registrazione e la sicurezza, ecc.


Solo pensando a questi: come potremmo decorare tali chiamate di metodo agli oggetti MBR? Quelle decorazioni costeranno in termini di prestazioni?
SO19

9

il suo utilizzo di base è per supportare l'accesso di oggetti tra due appdomain e questi appdomain possono trovarsi sullo stesso computer o su diversi computer tramite telecomando.

Vedere qui


5

Qualsiasi oggetto al di fuori del dominio dell'applicazione dell'applicazione chiamante deve essere considerato come oggetto remoto. Un oggetto remoto che dovrebbe essere derivato da MarshalByRefObjectClass. Qualsiasi oggetto può essere modificato in un oggetto remoto derivandolo da MarshalByRefObject. Gli oggetti senza ereditare da MarshalByRefObjectsono chiamati oggetti non remotabili .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.