Яке основне використання MarshalByRefObject?


Відповіді:


107

Видалення; це означає, що між AppDomains або машинами, а не серіалізувати і переносити об'єкт , об'єкт залишається на одному кінці, а інший створюється проксі. Усі виклики методів до проксі перехоплюються, і виклик передається у вигляді wiki wiki , msdn , що спричиняє виконання методу на іншій машині (як правило, серіалізує аргументи та повертає значення).

Примітка. Це може призвести до несподівано «балаканицьких» інтерфейсів. Об'єкт / проксі / RPC підхід тепер менш кращий, ніж підходи з явним кордоном обслуговування; Тепер Microsoft рекомендує замість видалення WCF- wiki , msdn .


5
@pavel - досить складний, але принаймні нам зрозуміло, де дорогі дзвінки. Якщо ви маєте на увазі пропускну здатність , існують способи їх пом’якшення.
Марк Гравелл

1
Іноді вам не потрібні явні межі, наприклад, у сценаріях, перерахованих для processdomain.codeplex.com Натомість ви хочете прозорість.
Андрій Савіних

1
у c # всі типи посилань є маршалом за замовчуванням або як його знати, soory, якщо це дурне питання, просто нове з цією концепцією @MarcGravell
Ehsan Sajjad

1
@Ehsan ні, вони за замовчуванням є маршалом. Маршалінг застосовується лише при перетині меж домену додатків, тому рідко це навіть актуально. Щоб бути маршалом-за-реф, він повинен успадкувати MashalByRefObject
Marc Gravell

28

Ще одне важливе застосування - MarshalByRefObjectце реалізація AOP за допомогою видалення раковин.

Якщо у вас є об'єкт, який походить від ContextBoundObject(який сам походить MarshalByRefObject), ви можете створити його в окремому контексті в межах одного AppDomain і зв’язок між об'єктами автоматично пройти через проксі-систему віддалення - що дозволяє вам підключати користувацькі мийки до віддаленої мийки, ланцюжок.

Це в кінцевому підсумку дозволяє "прикрасити" виклики методів до ваших об'єктів та реалізувати наскрізні послуги, такі як реєстрація та безпека тощо.


Поміркувавши над цим -Як ми могли б прикрасити такі виклики методів об’єктам MBR? Чи коштують ці прикраси з точки зору продуктивності?
SO19,

9

Основне використання - це підтримка доступу до об'єктів між двома додатками домену, і ці додатки можуть бути на одному комп'ютері або на різних комп'ютерах шляхом видалення.

Дивіться тут


5

Будь-який об'єкт, що знаходиться за межами домену додатка програми, що викликає, повинен розглядатися як віддалений об'єкт. Віддалений об’єкт, який повинен бути отриманий з MarshalByRefObjectкласу. Будь-який об'єкт може бути змінений у віддалений об’єкт шляхом його отримання MarshalByRefObject. Об'єкти без успадкування від MarshalByRefObjectназиваються об'єктами, що не віддаляються .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.