2013-10-08 19 views
7

目前我正在學習.NET遠程和我來的話題代理和我瞭解到,有兩種代理什麼是真正的和透明代理

  1. 透明代理
  2. 房地產代理

我想知道他們之間有什麼區別。請幫助我找到一些簡單的C#代碼示例。

我非常感謝你提前。

回答

3

MSDN: -

TransparentProxy是不能更換或 擴展的內部類。另一方面,RealProxy和ObjRef類是公開的,並且可以在必要時擴展和定製。 RealProxy類是例如執行負載平衡的理想候選者,因爲它處理遠程對象上的所有函數調用。 當調用Invoke時,從RealProxy派生的類可以獲取有關網絡中服務器的負載信息,並將呼叫路由到適當的服務器 。只需從Channel中請求所需 ObjectURI的MessageSink,然後調用SyncProcessMessage或 AsyncProcessMessage將呼叫轉發到所需的遠程對象。 當呼叫返回時,RealProxy自動處理返回 參數。

下面是一段代碼片斷,演示瞭如何使用派生的RealProxy類。

MyRealProxy proxy = new MyRealProxy(typeof(Foo)); 
Foo obj = (Foo)proxy.GetTransparentProxy(); 
int result = obj.CallSomeMethod(); 

TransparentProxy上述得到可以被轉發到另一 應用程序域。當第二個客戶端嘗試調用代理上的方法 時,遠程處理框架將嘗試創建MyRealProxy的實例,並且如果程序集可用,則所有調用 都將通過此實例進行路由。如果程序集不是 可用,則呼叫將通過RealProxy的默認遠程處理 進行路由。

ObjRef可以通過提供 默認ObjRef屬性TypeInfo,EnvoyInfo和ChannelInfo來替代。以下代碼顯示如何完成此操作。

public class ObjRef { 
    public virtual IRemotingTypeInfo TypeInfo 
    { 
    get { return typeInfo;} 
    set { typeInfo = value;} 
    } 

    public virtual IEnvoyInfo EnvoyInfo 
    { 
    get { return envoyInfo;} 
    set { envoyInfo = value;} 
    } 

    public virtual IChannelInfo ChannelInfo 
    { 
    get { return channelInfo;} 
    set { channelInfo = value;} 
    } 
}