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.