2008-11-26 2 views
1

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

Благодаря

ответ

3

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

EDIT: ответ на дополнительные разъяснения.

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

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

Смежные вопросы