Каково основное использование MarshalByRefObject?


Ответы:


108

Удаленное взаимодействие; это означает, что между доменами приложений или компьютерами, вместо сериализации и передачи объекта , объект остается на одном конце, а прокси создается на другом. Все вызовы методов к прокси-серверу перехватываются, и этот вызов передается как RPC wiki , msdn , в результате чего метод выполняется на другом компьютере (обычно сериализуются аргументы и возвращаемое значение).

Примечание: это может привести к неожиданно «болтливым» интерфейсам. Подход объект / прокси / RPC теперь менее предпочтителен по сравнению с подходами с явной границей службы; Microsoft теперь рекомендует WCF wiki , msdn вместо удаленного взаимодействия.


5
@pavel - это довольно сложно, но, по крайней мере, нам ясно, где находятся дорогие вызовы. Если вы имеете в виду пропускную способность , есть способы уменьшить это.
— Марк Грейвелл

1
Иногда вам не нужны явные границы, например, в сценариях, перечисленных для processdomain.codeplex.com. Вместо этого вам нужна прозрачность.
— Андрей Савиных

1
в C # все ссылочные типы по умолчанию упорядочены или как это узнать, soory, если это глупый вопрос, просто новичок в этой концепции @MarcGravell
— Ehsan

1
@Ehsan, нет, по умолчанию они маршалируются. Однако маршаллинг применяется только при пересечении границ домена и приложения, поэтому редко бывает актуальным. Чтобы быть маршалом судьи, он должен унаследовать MashalByRefObject
— Марк

28

Еще одно важное применение MarshalByRefObject- реализация АОП через удаленные цепочки приемников.

Если у вас есть объект, производный от ContextBoundObject(который сам является производным от MarshalByRefObject), вы можете создать его экземпляр в отдельном контексте в том же домене приложения, и обмен данными между объектами будет автоматически осуществляться через прокси-систему удаленного взаимодействия, что позволяет вам подключать настраиваемые приемники к приемнику удаленного взаимодействия. цепь.

В конечном итоге это позволяет вам «украсить» вызовы методов для ваших объектов и реализовать сквозные службы, такие как ведение журнала, безопасность и т. Д.


Просто подумайте об этом. Как мы могли бы украсить такие вызовы методов для объектов MBR? Эти украшения будут стоить с точки зрения производительности?
— SO19 01

9

его основное использование - поддержка доступа к объектам между двумя доменами приложений, и эти домены приложений могут находиться на одном компьютере или на разных компьютерах посредством удаленного взаимодействия.

Глянь сюда


5

Любой объект за пределами домена приложения вызывающего приложения следует рассматривать как удаленный объект. Удаленный объект, который должен быть производным от MarshalByRefObjectкласса. Любой объект можно превратить в удаленный объект, производя его от MarshalByRefObject. Объекты, от MarshalByRefObjectкоторых не происходит наследование , называются Объектами, не подлежащими удалению .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.