在.NET Remoting中,您如何判断对象是否用作远程对象?

时间:2012-09-27 13:51:01

标签: .net visual-studio reflection remoting

我知道.NET Remoting已被WCF取代,但这不仅仅是一个学术问题。

假设您有一个可定义的远程类,如下所示:

public class MyObject : MarshalByRefObject
{
}

假设您有客户端代码实例化MyObject类型的远程对象,但不将其用作远程对象:

public static void Main(String[] args)
{
   MyObject mo = new MyObject();
}

现在,假设我想以编程方式告诉mo的类型。据我所知,有两种方法可以做到:

Console.WriteLine(mo.GetType().ToString());//MyObject

Console.WriteLine(GetType(mo).ToString()); //MyObject

其中GetType()定义如下:

static Type GetType<T>(T t)
{
   return typeof(T);
}

在任何一种情况下,编译时类型和mo的运行时类型都是MyObject。

但现在假设我有客户端代码实际上使用MyObject实例作为远程对象:

public static void Main(String[] args)
{
   System.Runtime.Remoting.RemotingConfiguration.Configure("Client.exe.config");
   MyObject mo = new MyObject();
}

如果我想知道mo的类型,我可以使用上面使用的两种方法中的任何一种,并得到相同的结果。但是,当我放置一个断点并点击F5时,Visual Studio告诉我mo的类型实际上是MyObject {System.Runtime.Remoting.Proxies .__ TransparentProxy}

我想知道的是如何以编程方式告诉mo的基础类型是__TransparentProxy。

1 个答案:

答案 0 :(得分:3)

bool isProxy = System.Runtime.Remoting.RemotingServices.IsTransparentProxy(obj);