2008-11-06 4 views
1

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

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

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

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

С уважением, Anil.

+0

Почему вы используете метод GetObject с URL для связи между двумя доменами приложения? Создание объекта из другого приложения может быть выполнено с помощью CreateInstance. Также вы можете указать, какие ошибки вы говорите? – 2008-11-22 23:27:06

ответ

1

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

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

Свойство является компилятором. Он делает два метода: get_X и set_X, кажется, является полем.

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

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

+0

wow, старый вопрос. – Will 2010-06-19 15:47:18

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