Действительно ли MarshalByRefObject является особенным?

.NET имеет вещь, названную дистанционной работой, куда можно раздать объекты между отдельным appdomains или даже реальными машинами. Я не полностью понимаю, как волшебство сделано, следовательно этот вопрос.

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

Это довольно прохладно и работает как волшебство. И мне не нравится волшебство в программировании. Взгляд на MarshalByRefObject с Отражателем я не вижу ничего, что установило бы его кроме любого другого типичного объекта. Даже странный внутренний атрибут или что-либо. Таким образом, как целая прозрачная вещь прокси организована? Я могу сделать такой механизм сам? Я могу сделать альтернативу MyMarshalByRefObject который не наследовался бы MarshalByRefObject но все еще действовал бы то же? Или MarshalByRefObject получение некоторого специального режима самим механизмом.NET и целым подвигом дистанционной работы является non-duplicatable простыми смертными?

47
задан Jonathan Leffler 26 May 2015 в 05:03
поделиться

2 ответа

Магия, похоже, заключена в специальном классе TransparentProxy - среда выполнения .NET обрабатывает его особым образом.

​​Я думаю, что MarshalByRefObject может содержать некоторую дополнительную внутреннюю информацию, которая может быть полезна для этого механизма, но я не особо разбирался в этом.

18
ответ дан 26 November 2019 в 19:56
поделиться

Я считаю, что в MarshalByRefObject нет ничего особенного. Я считаю, что вся причина его существования кроется в управлении временем его существования и в том, как он собирает мусор на сервере. Есть несколько хороших комментариев по этому поводу в документации класса LifetimeServices .

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

4
ответ дан 26 November 2019 в 19:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: