在上篇博文中主要介绍了.NET的AppDomain的相关信息

四.总结:

    对象的跨应用程序域方法的标题就介绍这么多,希望对大家持有扶助。

风流倜傥.程序集分析:

    谈起程序集,将要领悟怎么叫做程序集,大家看看程序集的概念是何等。程序集大要分成二种:风姿罗曼蒂克种是类库(便是我们看看的.DLL文件);意气风发种是可执路程序(正是大家看见的.EXE文件)。程序集是多少个或三个模块/财富文件的逻辑分组(三个模块成为单模块程序集大概单文件程序集;八个模块成为多模块程序集或许多文件程序集);程序集是援用、安全性以至版本调控的细单反相机元。程序集的基本点结合,请看下边包车型地铁图示:

图片 1

      程序集并不一定对应唯黄金时代的一个文书,也足以饱含四个文本,在五个文件组成的程序聚集,包涵程序集清单的文本称为主模块,每一种程序集都必须要带有二个主模块,况兼唯有四个。对于程序集越发详实的介绍,在另生龙活虎篇博文中存有介绍,在此就不在赘述,博文地址:

三.DotNet的靶子封送拆解剖析:

     上边介绍了代办,下边简单的介绍一下目的的封送,对象的封送分为二种,第后生可畏种为传值封送;第三种为传援用封送。   

2.传引用封送:

      传引用封送的组织如上海教室所示,当顾客端在代理调用方法时,由代理将对章程的伏乞发送给远程对象,远程对象实行办法须求,最终再将结果传到给客商端,这种方式叫做传援用封送。传引用封送分为二种不一样的章程,分为顾客端激活(Client Activated)、服务端激活Singleton(Server Activated Singleton)、服务端激活SingleCall(Server Activated SingleCall)。三种办法的一块儿特点,服务对象创设且一向维持在宿主应用程序中。

   传引用封送的秘技在此边就不做详细介绍了。

   1.目的代理概述:

      本文主若是上课对象的跨应用程序域访问,前边介绍了选用程序域和次序集的连锁新闻,在这里边将在起来上课怎么着来达成目的的跨应用程序域的探访操作。对象跨应用程序域的操作必要明白代理和封送,代理提供了和长途对象完全相仿的接口,代理有着和长间距对象完全平等的接口和称号,对于顾客端来讲,代理就宛如远程对象相像。可是代理并不带有向客商端程序提供劳动的实在代码,代理仅仅是将协和与某大器晚成实际上目的绑定,然后将客商端对团结的乞请打包为消息,然后发送给实际目的。

     在这里间首先介绍一下代理,就须要领会多少个名词“透北魏理”和“真实代理”。好似下图所示:

图片 2    透明代理是由CL牧马人成立的风度翩翩种特地对象,重假诺为着将艺术调用调换来新闻调换。由上航海用体育场地能够看来透辽朝理和真实代理,透金朝理和实际代理是各样对应的关联。透北齐理对象最后必须当作一个一定的档案的次序的实例。

    二个程序获得透西魏理的引用后,这么些程序就要代理对象上利用格局调用。当程序在透北周理对象上使用办法调用时,CLPRADO将开创三个新的音信对象以表示这几个调用,CL揽胜极光会将以此新闻传递给真实代理用于拍卖。

    真实代理将产生此外一条音讯,以象征调用的结果,透北魏理将利用第二条音信对这一个调用的对战实行中间转播,透明地将结果传送给调用方。假诺实际代理重回的响应新闻包蕴异常,透齐国理将再次抛出那个充足,并一再回将结果传给调用方。

   透唐代理和实在代理之间的消息调换是由此真正带给的Invoke方法产生。在透西楚理对象上的不二秘技调用,诱致从基于仓库管理的消息调换为依靠音讯管理的主意。再重回响应音讯以前,真实代理的Invoke达成恐怕将新闻分发给别的数据的拍卖节点,为了传送调用到的三个实际上指标,最后的管理节点追根究底都亟待将倡议音讯转变为仓库帧。     

    转眼就到了元夜,火急火燎的脚步是大家在为生存努力的勾勒,新的一年,我们应该努力让投机有不意气风发致的活着和追求。生命不息,奋见死不救不唯有。在上篇博文中关键介绍了.NET的AppDomain的连锁音讯,在本篇博文中校会首要表达.NET程序集、对象代理,以至对象的封送原理。

二.DotNet的靶子代驾驭析:

   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:钦点的远程对象的艺术的艺术调用新闻。该方法知识轻易地为对象对象创建叁个货仓生成器,何况发送三个新闻给这一个选取器。货仓生成器选取器管理底层的仓库操作,而且调用实际的办法。当方法终止时,货仓生成器接受器把作为结果的仓库帧转换为响应的音讯,CLKuga用它看作该情势调用的结果重临。

   1.传值封送:

      当坐落于A应用程序域的对象传递给B应用程序域,.NET将A中指标的景观进行理并答复制、系列化、然后在B中重新创建,并通过代办对象开展访问。

图片 3

图片 4

                     (1 传值封送卡塔尔                                                           (2 传引用封送卡塔尔

本文由澳门皇冠844网站发布于健康生活,转载请注明出处:在上篇博文中主要介绍了.NET的AppDomain的相关信息

您可能还会对下面的文章感兴趣: