Activator.GetObject - MarshalByRefObject - PullRequest
1 голос
/ 07 ноября 2008

В .Net Activator.GetObject (тип Type, строковый URL, данные объекта) возвращает прокси для объекта. Я предполагаю, что прокси наследуется от MarshalByRefObject и может быть отправлен через домены приложений. Я прав?

В моем приложении я создаю объект в домене приложений A и использую его в домене приложений B. Членами объекта являются прокси-объекты, созданные с помощью Activator.GetObject (). поэтому, когда я нахожусь в AppDomain B, у меня есть прозрачный прокси для объекта, созданного в appdomain A. Когда я пытаюсь выполнить вызов метода для объектов прокси, я сталкиваюсь с ошибками.

Например, я создаю объект Connection в App Domain B. У меня есть прозрачный прокси для объекта Connection в App Domain A. Я сталкиваюсь с ошибкой, когда пытаюсь сделать такой вызов из AppDomain A. ConnectionObject. SecurityProxy.GetSecurityAccount (). похоже, проблема в том, что когда я пытаюсь сделать вызов, подобный приведенному выше, он пытается снова создать SecurityProxy в AppDomain A вместо переадресации вызова в AppDomain B. Прокси-сервер безопасности уже создан в AppDomain B, когда соединение объект был создан.

Не могли бы вы помочь мне понять, что я делаю не так?

С уважением, Анил.

1 Ответ

1 голос
/ 19 июня 2010

Предполагая, что SecurityProxy является свойством для ConnectionObject ...

Вы имеете дело с прокси ConnectionObject в домене A. Вызовы методов перенаправляются в домен B, где они выполняются, и результаты возвращаются в домен A.

Свойство - это трюк с компилятором. Это делает два метода, get_X и set_X, кажущимися полями.

Итак, когда вы вызываете «ConnectionObject.SecurityProxy», вы вызываете метод, который возвращает экземпляр SecurityProxy через границу домена приложения.

Вы должны сделать одно из двух: создать и развернуть экземпляр SecurityProxy и передать его в ConnectionObject или превратить ConnectionObject в фасад, который предоставляет только методы и возвращает только те типы / принимает аргументы, которые, как вы точно знаете, безопасны для пересечения домена приложения. границы.

...