Apa kegunaan utama MarshalByRefObject?

93

Apa tujuan MarshalByRefObject?

pengguna496949
sumber

Jawaban:

107

Remoting; ini berarti bahwa antara AppDomains atau mesin, daripada membuat serial dan mentransfer objek , objek tetap berada di satu ujung dan proxy dibuat di sisi lain. Semua panggilan metode ke proxy dicegat dan panggilan tersebut ditransmisikan sebagai RPC wiki , msdn , yang menyebabkan metode tersebut dieksekusi di komputer lain (biasanya menserialisasi argumen dan mengembalikan nilai).

Catatan: ini dapat menyebabkan antarmuka "cerewet" yang tidak terduga. Pendekatan objek / proxy / RPC sekarang kurang disukai daripada pendekatan dengan batas layanan eksplisit ; Microsoft sekarang merekomendasikan wiki WCF , msdn daripada remoting.

Marc Gravell
sumber
5
@ pavel - ini cukup rumit, tetapi setidaknya jelaskan di mana panggilan mahal itu berada. Jika yang Anda maksud adalah bandwidth , ada cara untuk menguranginya.
Marc Gravell
1
Kadang-kadang Anda tidak menginginkan batasan eksplisit, seperti dalam skenario yang terdaftar untuk processdomain.codeplex.com Sebaliknya Anda menginginkan transparansi.
Andrew Savinykh
1
di c # semua tipe referensi adalah marshal secara default ref atau bagaimana mengetahuinya, soory jika itu pertanyaan konyol, baru saja dengan konsep ini @MarcGravell
Ehsan Sajjad
1
@Ehsan tidak, mereka adalah marshal-by-val secara default. Marshalling hanya berlaku saat melintasi batas domain aplikasi, jadi jarang sekali hal itu relevan. Untuk menjadi marshal-by-ref, itu harus mewarisi MashalByRefObject
Marc Gravell
28

Kegunaan penting lainnya MarshalByRefObjectadalah untuk mengimplementasikan AOP melalui remote sink-chain.

Jika Anda memiliki objek yang berasal dari ContextBoundObject(yang berasal dari MarshalByRefObject), Anda dapat membuat instance dalam Konteks terpisah dalam AppDomain yang sama dan membuat komunikasi antar objek secara otomatis melalui sistem proxy Remoting - memungkinkan Anda untuk menyambungkan sink kustom ke sink Remoting- rantai.

Hal ini pada akhirnya memungkinkan Anda untuk 'menghias' panggilan metode ke objek Anda dan mengimplementasikan layanan lintas sektor, seperti logging dan keamanan, dll.

Dean Chalk
sumber
Hanya memikirkan ini -Bagaimana kita bisa menghias panggilan metode seperti itu ke objek MBR? Apakah dekorasi itu mahal dalam hal performa?
SO19
9

Penggunaan dasarnya adalah untuk mendukung akses objek antara dua appdomains dan appdomains ini dapat berada di komputer yang sama atau di komputer yang berbeda melalui remote.

Lihat disini

TalentTuner
sumber
5

Objek apa pun di luar domain aplikasi aplikasi pemanggil harus dianggap sebagai Objek Jarak Jauh. Objek Jarak Jauh yang harus diturunkan dari MarshalByRefObjectKelas. Objek apa pun dapat diubah menjadi Objek Jarak Jauh dengan menurunkannya dari MarshalByRefObject. Objek tanpa mewarisi MarshalByRefObjectdisebut Objek Non-remotable .

Arvind Singh
sumber