在.Net中,Activator.GetObject(类型类型,字符串url,对象数据)返回对象的代理。我猜这个代理继承自MarshalByRefObject,可以通过AppDomains发送。我说的对吗?
在我的应用程序中,我在appdomain A中创建了一个对象并使用了appdomain B。该对象的成员是使用Activator.GetObject ()创建的代理对象。因此,当我在AppDomain B中时,我有一个到appdomain A中创建的对象的透明代理。当我试图在代理对象上执行调用该方法时,我遇到了错误。
例如,我在App Domain B中创建了一个Connection对象。我在App Domain A中为Connection对象创建了透明代理。当我尝试从AppDomain A.进行这样的调用时,遇到了错误。看起来问题在于,当我尝试进行类似上面的调用时,它尝试在AppDomain A中再次创建SecurityProxy,而不是将调用转发到AppDomain B。在创建connection对象时,已经在AppDomain B中创建了安全代理。
你能帮我找出我做错了什么吗?
问候你,阿尼尔。
发布于 2010-06-19 23:46:57
假设SecurityProxy是ConnectionObject上的一个属性...
您正在处理域A中的ConnectionObject代理。方法调用被转发到域B,在域B中执行,并将结果返回到域A。
属性是一种编译器技巧。它使两个方法get_X和set_X看起来像是一个字段。
因此,当您调用"ConnectionObject.SecurityProxy“时,您调用的是一个跨应用程序域边界返回SecurityProxy实例的方法。
您必须做以下两件事中的一件:创建并解包SecurityProxy的实例并将其交给ConnectionObject,或者将ConnectionObject转换为只公开方法且只返回您绝对知道可以安全跨越应用程序域边界的类型/参数的外观。
https://stackoverflow.com/questions/270427
复制相似问题