【问题标题】:How to determine whether a TransparentProxy points to a valid instance如何确定一个透明代理是否指向一个有效的实例
【发布时间】:2011-02-23 18:05:39
【问题描述】:

有没有办法确定TransparentProxy 是否指向有效引用?

我有IPlugin。我创建了一个新的 AppDomain,使用 IPlugin 的实现加载程序集,并创建该实现的实例。我收到了IPlugin,但在其背后是TransparentProxy。如果我卸载辅助 AppDomain,IPlugin 的实例(代理指向的那个)就消失了。但是代理仍然指向那里。当我尝试访问代理时,我的程序崩溃(无一例外)。

伪代码:

var domain = CreateDomain("domain");
var assembly = domain.LoadAssembly("myAssembly");
var plugin = domain.CreateObject("MyPlugin") as IPlugin; 
// plugin is really a TransparentProxy to a MyPlugin

if (plugin != null)
    plugin.DoSomething("123");

UnloadDomain(domain);

if (plugin != null) // Still evaluates to TRUE!
    plugin.DoSomething("123"); // Program crashes with no exceptions

【问题讨论】:

  • 你应该得到一个 RemotingException,而不是崩溃。不过,我也想知道这个问题的答案。

标签: .net proxy appdomain


【解决方案1】:

好吧,既然没有人提出正确的答案,你可以试试这个:

public static bool IsValidReference(MarshalByRefObject obj)
{
    try {
        obj.Equals(null);
        return true;
    } catch (RemotingException e) {
        return false;
    }
}

【讨论】:

  • 我没有收到任何异常。我的应用程序就死了。
猜你喜欢
  • 2021-01-21
  • 1970-01-01
  • 1970-01-01
  • 2011-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-13
  • 1970-01-01
相关资源
最近更新 更多