Qual é o principal uso de MarshalByRefObject?

93

Qual é o propósito de MarshalByRefObject?

usuário496949
fonte

Respostas:

107

Remoting; isso significa que entre AppDomains ou máquinas, em vez de serializar e transferir o objeto , o objeto permanece em uma extremidade e um proxy é criado na outra. Todas as chamadas de método para o proxy são interceptadas e a chamada é transmitida como RPC wiki , msdn , fazendo com que o método seja executado na outra máquina (normalmente serializando os argumentos e o valor de retorno).

Nota: isso pode levar a interfaces inesperadamente "tagarelas". A abordagem de objeto / proxy / RPC agora é menos preferível a abordagens com um limite de serviço explícito ; A Microsoft agora recomenda WCF wiki , msdn em vez de remoting.

Marc Gravell
fonte
5
@pavel - é bastante complexo, mas pelo menos deixa claro onde estão as ligações caras. Se você quer dizer largura de banda , existem maneiras de mitigar isso.
Marc Gravell
1
Às vezes, você não deseja limites explícitos, como em cenários listados para processdomain.codeplex.com. Em vez disso, você deseja transparência.
Andrew Savinykh
1
em c # todos os tipos de referência são empacotados por padrão de referência ou como saber, soory se for uma pergunta boba, apenas novo com este conceito @MarcGravell
Ehsan Sajjad
1
@Ehsan não, eles são marechal-by-val por padrão. O empacotamento se aplica apenas ao cruzar os limites do domínio do aplicativo, portanto, é raro que seja relevante. Para ser delegado por árbitro, ele deve herdar MashalByRefObject
Marc Gravell
28

Outro uso importante do MarshalByRefObjecté para implementar AOP por meio de coletores remotos.

Se você tiver um objeto que deriva de ContextBoundObject(do qual ele próprio deriva MarshalByRefObject), poderá instanciá-lo em um Contexto separado dentro do mesmo AppDomain e fazer as comunicações entre os objetos passarem automaticamente pelo sistema de proxy Remoting - permitindo que você conecte coletores personalizados no coletor Remoting- corrente.

Em última análise, isso permite que você "decore" chamadas de método para seus objetos e implemente serviços transversais, como registro e segurança, etc.

Dean Chalk
fonte
Apenas pensando neles - Como podemos decorar essas chamadas de método para objetos MBR? Essas decorações custarão em termos de desempenho?
SO19
9

Seu uso básico é para suporte de acesso de objetos entre dois appdomains e esses appdomains podem estar no mesmo computador ou em computadores diferentes via remoting.

Veja aqui

TalentTuner
fonte
5

Qualquer objeto fora do domínio do aplicativo do chamador deve ser considerado como objeto remoto. Um objeto remoto que deve ser derivado de MarshalByRefObjectclasse. Qualquer objeto pode ser transformado em um Objeto Remoto derivando dele MarshalByRefObject. Objetos sem herança MarshalByRefObjectsão chamados de Objetos Não Remotáveis .

Arvind Singh
fonte