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에서 생성 된 객체에 투명한 프록시가 있습니다. 프록시 객체에서 메서드 호출을 실행하려고하면 오류가 발생합니다.

예를 들어, App Domain B에 Connection 객체를 만듭니다. App Domain A의 Connection 객체에 대한 투명한 프록시가 있습니다. AppDomain A에서 이처럼 호출하려고하면 오류가 발생합니다. ConnectionObject .SecurityProxy.GetSecurityAccount(). 위와 같은 호출을 시도하면 AppDomain B에 대한 호출을 전달하는 대신 AppDomain A에서 SecurityProxy를 다시 작성하려고 시도합니다. 보안 프록시는 AppDomain B에서 이미 생성되었습니다. 연결시 개체가 생성되었습니다.

제가 잘못하고있는 것을 알아내는 데 도움주세요.

감사합니다, Anil. SecurityProxy이 ConnectionObject의 속성이라고 가정

+0

왜 두 개의 appdomain간에 통신하기 위해 URL과 함께 GetObject 메서드를 사용합니까? 다른 appdomain에서 객체를 생성하는 것은 CreateInstance를 사용하여 수행 할 수 있습니다. 또한 오류에 대해 이야기하고 있습니까? –

답변

1

...

당신은 도메인 A. 메서드 호출에 ConnectionObject 프록시 상대하고

은 실행하는 도메인 B에 전달되어, 그 결과로 돌아갑니다 도메인 A.

속성은 컴파일러 트릭입니다. get_X와 set_X의 2 개의 메소드가 필드 인 것처럼 보입니다.

그래서 "ConnectionObject.SecurityProxy"를 호출하면 appdomain 경계에서 SecurityProxy의 인스턴스를 반환하는 메서드를 호출하게됩니다.

두 가지 중 하나를 수행해야합니다. SecurityProxy의 인스턴스를 생성 및 비 활성화하여 ConnectionObject에 전달하거나 ConnectionObject를 메서드를 노출하고 유형을 반환하는 것으로 만 설정/교차하는 것이 안전하다는 것을 절대적으로 알고있는 인수를받습니다. appdomain 경계.

+0

와우, 오래된 질문. – Will