Qual é o principal uso de MarshalByRefObject?


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.


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.


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


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 .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.