Jakie jest główne zastosowanie MarshalByRefObject?


Odpowiedzi:


107

Zdalne; oznacza to, że między domenami aplikacji lub maszynami zamiast serializować i przesyłać obiekt , obiekt pozostaje na jednym końcu, a na drugim jest tworzony serwer proxy. Wszystkie wywołania metod do serwera proxy są przechwytywane, a wywołanie jest przesyłane jako wiki RPC , msdn , powodując wykonanie metody na innym komputerze (zazwyczaj serializacja argumentów i zwracana wartość).

Uwaga: może to prowadzić do nieoczekiwanie „rozmownych” interfejsów. Podejście obiekt / proxy / RPC jest teraz mniej preferowane niż podejścia z jawną granicą usługi; Firma Microsoft zaleca teraz WCF wiki , msdn zamiast komunikacji zdalnej .


5
@pavel - jest to dość skomplikowane, ale przynajmniej jest dla nas jasne, gdzie są drogie połączenia. Jeśli masz na myśli przepustowość , istnieją sposoby na złagodzenie tego.
— Marc Gravell

1
Czasami nie chcesz wyraźnych granic, na przykład w scenariuszach wymienionych dla processdomain.codeplex.com Zamiast tego chcesz przejrzystości.
— Andrew Savinykh

1
w c # wszystkie typy referencyjne są domyślnie marshal lub jak to poznać, więc jeśli to głupie pytanie, po prostu nowe z tą koncepcją @MarcGravell
— Ehsan Sajjad

1
@Ehsan nie, są one domyślnie przydzielane według wartości. Marshalling ma jednak zastosowanie tylko w przypadku przekraczania granic domeny aplikacji, więc rzadko jest to nawet istotne. Aby być marszałkiem, musi odziedziczyć MashalByRefObject
— Marc Gravell

28

Innym ważnym zastosowaniem MarshalByRefObjectjest implementacja AOP poprzez zdalne łańcuchy ujść.

Jeśli masz obiekt, który pochodzi z ContextBoundObject(który sam się wywodzi MarshalByRefObject), możesz utworzyć jego wystąpienie w oddzielnym kontekście w tej samej domenie aplikacji i mieć komunikację między obiektami automatycznie przechodzącą przez system zdalnego proxy - umożliwiając podłączenie niestandardowych ujść do ujścia zdalnego. łańcuch.

Ostatecznie umożliwia to `` dekorowanie '' wywołań metod do obiektów i wdrażanie usług przekrojowych, takich jak logowanie i zabezpieczenia itp.


Zastanawiając się tylko nad tym - Jak możemy udekorować takie wywołania metod do obiektów MBR? Czy te dekoracje będą kosztować pod względem wydajności?
— SO19

9

jego podstawowym zastosowaniem jest obsługa dostępu do obiektów między dwiema domenami aplikacji, a te domeny aplikacji mogą znajdować się na tym samym komputerze lub na różnych komputerach za pośrednictwem komunikacji zdalnej.

Spójrz tutaj


5

Każdy obiekt spoza domeny aplikacji aplikacji wywołującej powinien być traktowany jako obiekt zdalny. Obiekt zdalny, który powinien pochodzić z MarshalByRefObjectklasy. Każdy obiekt można zmienić w obiekt zdalny, wyprowadzając go z MarshalByRefObject. Obiekty bez dziedziczenia MarshalByRefObjectsą nazywane obiektami nie zdalnymi .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.