1

在 .Net Activator.GetObject(Type type, string url, object data) 中返回对象的代理。我猜这个代理继承自 MarshalByRefObject 并且可以跨 AppDomains 发送。我对吗?

在我的应用程序中,我在 appdomain A 中创建一个对象并使用它 appdomain B。该对象的成员是使用 Activator.GetObject () 创建的代理对象。因此,当我在 AppDomain B 中时,我对在 appdomain A 中创建的对象有一个透明代理。当我尝试对代理对象执行调用该方法时,我遇到了错误。

例如,我在 App Domain B 中创建了一个 Connection 对象。我在 App Domain A 中有 Connection 对象的透明代理。当我尝试从 AppDomain A 进行这样的调用时遇到错误。 ConnectionObject.SecurityProxy.GetSecurityAccount ( )。看起来问题是当我尝试像上面那样拨打电话时,它试图在 AppDomain A 中再次创建 SecurityProxy,而不是将呼叫转发到 AppDomain B。连接时已经在 AppDomain B 中创建了安全代理对象被创建。

你能帮我弄清楚我做错了什么吗?

问候,阿尼尔。

4

1 回答 1

1

假设 SecurityProxy 是 ConnectionObject 上的一个属性...

您正在处理域 A 中的 ConnectionObject 代理。方法调用被转发到域 B,在那里它们被执行,结果返回到域 A。

属性是一种编译器技巧。它使 get_X 和 set_X 这两个方法看起来是一个字段。

因此,当您调用“ConnectionObject.SecurityProxy”时,您正在调用一个方法,该方法返回一个跨 appdomain 边界的 SecurityProxy 实例。

您必须做以下两件事之一:创建和解包 SecurityProxy 的实例并将其交给 ConnectionObject,或者将 ConnectionObject 转变为仅公开方法并仅返回您绝对知道可以安全跨越 appdomain 边界的类型/参数的外观。

于 2010-06-19T15:46:57.263 回答