2012-09-27 53 views
1

我知道.NET Remoting已被WCF取代,但這比其他任何內容都更像一個學術問題。在.NET Remoting中如何判斷一個對象是否被用作遠程對象?

假設你有定義了一個遠程的類,如下所示:

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。

回答

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

這非常有幫助。謝謝。僅供參考,我將補充一點,上述內容不適用於由SoapSuds工具生成的程序集內定義的類型實例,即使它用作遠程對象。 –

相關問題