MarshalByRefObject и сериализация - PullRequest
1 голос
/ 26 ноября 2008

Когда я создаю класс, скажем ClassA, который наследует от MarshalByRefObject , а затем использует метод RemotingServices.Marshal для создания объекта ObjRef , он сериализует все частные поля ClassA?

Спасибо

1 Ответ

3 голосов
/ 26 ноября 2008

Нет. Идея MarshalByRefObject заключается в том, что не все сериализуются для удаленного взаимодействия. Вместо этого CLR генерирует так называемый прозрачный прокси в этом сценарии. Он называется прозрачным, потому что выглядит и действует точно так же, как ClassA, но на самом деле это не ClassA. Все вызовы в экземпляр ClassA распределяются через границы удаленного взаимодействия в исходный домен приложений, в котором был создан ClassA.

РЕДАКТИРОВАТЬ: Отвечая на дальнейшие разъяснения.

При передаче данных в MarshalByRefObject в этом сценарии необходимо учитывать тип данных. По существу происходит от MarshalByRefObject или нет. Если это происходит от MarshalByRefObject, то параметр будет передан в качестве прокси. Если он не является производным от MarshalByRefObject, он будет сериализован, передан через границу AppDomain в виде последовательности байтов и затем десериализирован в целевом AppDomain.

В вашем сценарии перечислены строки, которые не являются MarshalByRef (обычно я называю их MarshalByValue, но это чисто соглашение). Таким образом, они будут сериализованы при передаче через границу удаленного взаимодействия.

...