最简单的方法来进行跨appdomain调用?

时间:2011-06-05 11:19:13

标签: c# .net clr ipc

我需要在另一个appdomain中调用对象的方法(传递param并获取结果)。想法?

UPD这两个AppDomain都不是由我的代码创建的(主机应用程序创建它,然后我的代码被调用)。我如何从另一个AppDomain访问?

2 个答案:

答案 0 :(得分:14)

如果您在其他域中创建了一个对象,例如使用AppDomain.CreateInstanceAndUnwrap,在另一个域中调用对象所需的只是调用对象的方法。

进行跨应用程序域调用的最简单方法就是直接在该对象上进行调用,该对象实际上是通过其代理从另一个域公开的,存在于另一个域中。

<强> UPD
不幸的是,获得主机域并不容易。您应该枚举this之类的域名,并在其中找到主机名称。我认为您的主机域是方法AppDomain.IsDefaultAppDomain返回 true 的域。

答案 1 :(得分:3)

通常使用AppDomain.DoCallBack来实现。您需要确保如果要传递参数,则需要创建一个可序列化对象,其方法将传递给上述方法。 在回调方法中,您可以执行另一个AppDomain回调以将结果传递回原始AppDomain。