Передача удаленного объекта из одного домена приложения в другой процесс

В основном у меня есть 2 домена приложений в моем первом процессе (службе), который разговаривает с другим процессом (exe), который работает на рабочем столе с использованием удаленного взаимодействия IPC. Во втором домене приложения моей службы я загружаю свои плагины, а затем взаимодействую с ними, используя интерфейс из домена приложения по умолчанию. Это позволяет мне выгружать плагины, когда я хочу, выгружая второй домен приложения.

Это отлично работает в процессе обслуживания, но проблема, которую я обнаружил, заключается в том, что я хочу передать один из объектов плагина (например, прокси) другому процессу и запустить его в домене приложения процессов. Если я передаю его в настоящее время, он дает мне следующее исключение удаленного взаимодействия:

«Этот удаленный прокси-сервер не имеет приемника канала, что означает, что либо у сервера нет зарегистрированных каналов сервера, которые прослушивают, либо у этого приложения нет подходящего клиентского канала для связи с сервером»

Есть ли способ достичь того, чего я хочу, что, как я полагаю, передает удаленный объект? Эту ситуацию довольно сложно описать, поэтому, пожалуйста, попросите разъяснений, если это поможет. Любые предложения будут ценны.


person PentaPenguin    schedule 18.08.2009    source источник


Ответы (1)


Я видел это сообщение об ошибке в ситуации, аналогичной вашей, когда делал следующее:

В процессе обслуживания у меня было 2 домена приложений: A и B.

Именно в AppDomain B я настраиваю канал удаленного взаимодействия и создаю удаленный объект RemotableObject для удаленного процесса.

Затем я создал объект anObject в AppDomain A и вызвал:

RemotableObject.PassProxyToOtherExe(anObject);

Теперь где-то в удаленном процессе я обращаюсь к свойству anObject (anObject.Name), и именно здесь возникает ошибка!

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

Чтобы решить эту проблему в моем случае, я создал фабрику в AppDomain B, которая создала бы объект, который я хотел, и передала ссылку обратно в AppDomain A (объект должен наследовать от MarshalByObjectRef в любом случае, если вы переходите через удаленное взаимодействие), и, похоже, работал.

person noce    schedule 17.10.2010