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