¿Cuál es el uso principal de MarshalByRefObject?

93

¿Cuál es el propósito de MarshalByRefObject?

user496949
fuente

Respuestas:

107

Remoting; significa que entre AppDomains o máquinas, en lugar de serializar y transferir el objeto , el objeto permanece en un extremo y se crea un proxy en el otro. Todas las llamadas al método al proxy se interceptan y la llamada se transmite como RPC wiki , msdn , lo que hace que el método se ejecute en la otra máquina (normalmente serializando los argumentos y el valor de retorno).

Nota: esto puede llevar a interfaces inesperadamente "comunicativas". El enfoque de objeto / proxy / RPC es ahora menos preferible que los enfoques con un límite de servicio explícito ; Microsoft ahora recomienda WCF wiki , msdn en lugar de la comunicación remota.

Marc Gravell
fuente
5
@pavel: es bastante complejo, pero al menos nos deja claro dónde están las llamadas caras. Si te refieres al ancho de banda , hay formas de mitigarlo.
Marc Gravell
1
A veces, no desea límites explícitos, como en los escenarios enumerados para processdomain.codeplex.com En su lugar, desea transparencia.
Andrew Savinykh
1
en c # todos los tipos de referencia son marshal por defecto de referencia o cómo saberlo, soory si es una pregunta tonta, simplemente nuevo con este concepto @MarcGravell
Ehsan Sajjad
1
@Ehsan no, se clasifican por valor por defecto. Sin embargo, la clasificación solo se aplica cuando se cruzan los límites del dominio de la aplicación, por lo que es raro que sea relevante. Para ser comisario por referencia, debe heredar MashalByRefObject
Marc Gravell
28

Otro uso importante de MarshalByRefObjectes para implementar AOP a través de cadenas de sumideros remotas.

Si tiene un objeto que se deriva de ContextBoundObject(que a su vez deriva de MarshalByRefObject), puede instanciarlo en un contexto separado dentro del mismo AppDomain y hacer que las comunicaciones entre los objetos pasen automáticamente a través del sistema de proxy Remoting, lo que le permite conectar sumideros personalizados en el sumidero Remoting. cadena.

En última instancia, esto le permite 'decorar' llamadas de método a sus objetos e implementar servicios transversales, como registro y seguridad, etc.

Dean Chalk
fuente
Solo pensando en estos: ¿Cómo podríamos decorar tales llamadas de método a objetos MBR? ¿Esas decoraciones costarán en términos de rendimiento?
SO19
9

Su uso básico es para admitir el acceso de objetos entre dos dominios de aplicaciones y estos dominios de aplicaciones pueden estar en la misma computadora o en las diferentes computadoras a través de la comunicación remota.

Mira aquí

TalentTuner
fuente
5

Cualquier objeto fuera del dominio de la aplicación de la persona que llama debe considerarse como Objeto Remoto. Un objeto remoto que debería derivarse de MarshalByRefObjectClass. Cualquier objeto se puede convertir en un Objeto Remoto derivándolo de MarshalByRefObject. Los objetos sin heredar MarshalByRefObjectse denominan Objetos no remotables .

Arvind Singh
fuente