在本篇博文上将会首要表明.NET程序集、对象代理

   1.传值封送:

     
当位于A应用程序域的指标传递给B应用程序域,.NET将A中目的的情景进行复制、连串化、然后在B中另行创制,并透过代办对象实行拜谒。

图片 1

图片 2

                     (1 传值封送)                                      
                    (2 传引用封送)

2.传援用封送:

     
传援引封送的构造如上海教室所示,当客商端在代理调用方法时,由代理将对章程的央浼发送给远程对象,远程对象进行措施哀告,最终再将结果传到给客商端,这种格局叫做传引用封送。传引用封送分为两种分裂的秘技,分为客商端激活(Client
Activated)、服务端激活Singleton(Server Activated
Singleton)、服务端激活SingleCall(Server Activated
SingleCall)。两种方法的联合具名性子,服务指标创设且一贯保持在宿主应用程序中。

   传援引封送的办法在此间就不做详细介绍了。

四.总结:

    对象的跨应用程序域方法的主题素材就介绍这么多,希望对大家具有支持。

   2.对象代理原理剖判:

        下边根本介绍了代理的有的为主理论,上面看一下这个宗旨指标。

    (1).RealProxy.GetTransparentProxy():重返 RealProxy
的这段时间实例的晶莹代理。  

  public virtual object GetTransparentProxy()
    {
      return this._tp;
    }

     
 该措施在System.Runtime.Remoting.Proxies命名空间下,RealProxy类:提供代理的基本功效。

    (2).ProxyAttribute.CreateProxy():创立由钦定的
ObjRef描述并献身服务器上的长距离对象的长距离管理代理的实例。 

[SecurityCritical]
    public virtual RealProxy CreateProxy(ObjRef objRef, Type serverType, object serverObject, Context serverContext)
    {
      RemotingProxy remotingProxy = new RemotingProxy(serverType);
      if (serverContext != null)
        RealProxy.SetStubData((RealProxy) remotingProxy, (object) serverContext.InternalContextID);
      if (objRef != null && objRef.GetServerIdentity().IsAllocated)
        remotingProxy.SetSrvInfo(objRef.GetServerIdentity(), objRef.GetDomainID());
      remotingProxy.Initialized = true;
      Type type = serverType;
      if (!type.IsContextful && !type.IsMarshalByRef && serverContext != null)
        throw new RemotingException(Environment.GetResourceString("Remoting_Activation_MBR_ProxyAttribute"));
      return (RealProxy) remotingProxy;
    }

 
 该办法在 System.Runtime.Remoting.Proxies命名空间下,ProxyAttribute类提醒对象类型需求自定义代理。该形式接收5个参数,objRef:对要为其创设代理的远程对象的目的引用;serverType:远程对象所在的服务器的项目;serverObject:服务器对象;serverContext:服务器对象所在的上下文。该形式在钦点的
<see cref=”T:System.Runtime.Remoting.ObjRef”/>
中表达的长途对象的长途管理代理的新实例。

   
(3).RemotingServices:提供二种运用和发布远程对象及代理的点子。此类不能被一而再。

       GetRealProxy()方法重返钦定透唐宋理后面的诚实代理。

 [SecurityCritical]
    [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
    [MethodImpl(MethodImplOptions.InternalCall)]
    public static extern RealProxy GetRealProxy(object proxy);

   
 该方式接收参数,proxy:贰个透明朝理。该方法重临透金朝理前面包车型客车下马看花代理实例。

   
 IsTransparentProxy()方法重返三个布尔值,该值提醒给定的目标是晶莹代理照旧实际指标。

[SecuritySafeCritical]
    [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
    [MethodImpl(MethodImplOptions.InternalCall)]
    public static extern bool IsTransparentProxy(object proxy);

   
该办法接收二个参数,proxy:参数对要检查的对象的援用。该格局重临钦定的指标是晶莹代理依然实际指标。

   ExecuteMessage():连接到钦赐的远程对象,并对其举行提供的 <see
cref=”T:System.Runtime.Remoting.Messaging.IMethodCallMessage”/>。

  [SecurityCritical]
    public static IMethodReturnMessage ExecuteMessage(MarshalByRefObject target, IMethodCallMessage reqMsg)
    {
      if (target == null)
        throw new ArgumentNullException("target");
      RealProxy realProxy = RemotingServices.GetRealProxy((object) target);
      if (realProxy is RemotingProxy && !realProxy.DoContextsMatch())
        throw new RemotingException(Environment.GetResourceString("Remoting_Proxy_WrongContext"));
      return (IMethodReturnMessage) new StackBuilderSink(target).SyncProcessMessage((IMessage) reqMsg);
    }

   
该格局接收多少个参数,target:要调用其模式的远程对象。reqMsg:内定的长途对象的主意的秘技调用新闻。该措施知识轻便地为指标对象创造三个仓库生成器,並且发送一个新闻给这一个接收器。仓库生成器接收器管理底层的库房操作,而且调用实际的不二诀窍。当方法终止时,商旅生成器接收器把作为结果的饭馆帧转变为响应的消息,CLCRUISER用它看作该办法调用的结果回到。

   
转眼就到了元宵,匆匆忙忙的步伐是大家在为生存努力的勾勒,新的一年,我们应有大力让谐和有不平等的生活和追求。生命不息,奋斗不唯有。在上篇博文中首要介绍了.NET的AppDomain的有关音信,在本篇博文上将会首要表明.NET程序集、对象代理,以及对象的封送原理。

三.DotNet的对象封送解析:

   
 上边介绍了代理,下边轻巧的介绍一下对象的封送,对象的封送分为三种,第一种为传值封送;第三种为传援用封送。
  

   1.对象代理概述:

     
本文首假设执教对象的跨应用程序域访谈,后面介绍了运用程序域和次序集的连锁信息,在这里将在最早上课怎么着来兑现指标的跨应用程序域的走访操作。对象跨应用程序域的操作需求驾驭代理和封送,代理提供了和长途对象完全一样的接口,代理有着和长距离对象完全平等的接口和称号,对于客商端来说,代理就恍如远程对象同样。不过代理并不含有向顾客端程序提供劳务的莫过于代码,代理仅仅是将协调与某一实际上目的绑定,然后将顾客端对友好的伸手打包为消息,然后发送给实际目的。

   
 在这里首先介绍一下代理,就必要知道三个名词“透汉代理”和“真实代理”。有如下图所示:

图片 3   
透明朝理是由CL福睿斯创立的一种特意对象,主如若为着将艺术调用转换到音讯调换。由上海体育场面能够看到透东魏理和忠实代理,透西魏理和忠实代理是种种对应的涉嫌。透南齐理对象最后必须充当一个特定的类型的实例。

   
多少个前后相继获得透东汉理的援引后,那么些顺序将要代理对象上选用办法调用。当程序在透唐代理对象上应用方式调用时,CLCRUISER将创建贰个新的音信对象以表示那些调用,CLLAND会将以此音信传递给真实代理用于拍卖。

   
真实代理将发生别的一条音信,以代表调用的结果,透南宋理将运用第二条新闻对这些调用的对阵举办中间转播,透明地将结果传送给调用方。假使实在代理重临的响应信息包含极度,透南陈理将再次抛出这些特别,并再三回将结果传给调用方。

 
 透古时候理和忠实代理之间的消息交流是因而真正带来的Invoke方法发生。在透明代理对象上的不二秘技调用,导致从基于货仓管理的音讯调换为依据音信管理的格局。再回到响应音讯在此之前,真实代理的Invoke落成或者将新闻分发给其他数据的管理节点,为了传送调用到的叁个实在目的,最终的拍卖节点归根到底都亟待将呼吁音讯转变为货仓帧。 
   

二.DotNet的对象代理深入分析:

一.程序集分析:

   
聊起程序集,就要领会怎么叫做程序集,大家看看程序集的定义是怎么。程序集大意分为三种:一种是类库(正是大家看出的.DLL文件);一种是可实践程序(就是我们看来的.EXE文件)。程序集是一个或三个模块/能源文件的逻辑分组(多少个模块成为单模块程序集大概单文件程序集;三个模块成为多模块程序集或许多文本程序集);程序集是引用、安全性以及版本调整的小小单元。程序集的严重性构成,请看下边包车型大巴图示:

图片 4

     
程序集并不一定对应独一的四个文本,也足以富含八个文件,在三个文件组成的次第集中,满含程序集清单的公文称为主模块,每一种程序集都必得含有一个主模块,而且唯有一个。对于程序集越发详细的介绍,在另一篇博文中颇具介绍,在此间就不在赘述,博文地址:http://www.cnblogs.com/pengze0902/p/6043525.html

相关文章