什么是真实和透明的代理

时间:2013-10-08 09:54:17

标签: c#-4.0

目前我正在研究.Net Remoting,我来到主题代理,我了解到有两种代理

  1. 透明代理
  2. Real Proxies
  3. 我想知道它们之间有什么区别。请帮我看一下C#代码中的一些简单示例。

    我非常感谢你。

2 个答案:

答案 0 :(得分:2)

来自MSDN: -

  

TransparentProxy 是一个无法替换的内部类或   延长。另一方面,RealProxy和ObjRef类是   公共,可以在必要时进行扩展和定制。该    RealProxy 类是执行负载平衡的理想选择   例如,因为它处理远程对象上的所有函数调用。   调用Invoke时,从RealProxy派生的类可以获得加载   有关网络上服务器的信息,并将呼叫路由到   适当的服务器只需要一个MessageSink就可以获得所需的信息   来自Channel的ObjectURI并调用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;}
  }
}

答案 1 :(得分:0)

Google中的简单搜索会产生许多有趣的内容,包括MSDN文章:http://msdn.microsoft.com/en-us/library/ms973857.aspx