MarshalByRefObject особенный? - PullRequest
       18

MarshalByRefObject особенный?

47 голосов
/ 27 апреля 2010

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

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

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

Ответы [ 2 ]

18 голосов
/ 02 июня 2010

Магия, кажется, в особом TransparentProxy классе - .NET Runtime обрабатывает его особым образом.

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

4 голосов
/ 27 апреля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...