zoukankan      html  css  js  c++  java
  • 关于MarshalByRefObject的解释

    首先了解一下不同应用程序域中的对象的通信方式有两种:

    一种是跨应用程序域边界传输对象副本。按值封送(marshal by value)

    一种是使用代理交换消息。按引用封送(marshal by reference)

    本机或者是服务器上的其实都是同一个实例,只不过是服务器创建后你在本地使用了那个对象而已。比如:

    A类继承了marshalbyrefobject,那么A类由服务器创建实例了,客户端都可以使用这个实例了。假设A类有一个方法,Function返回值为一个string类型,这个方法有一系列的操作。客户端在调用这个方法的时候只得到服务器返回的一个值,那个一系列的操作都将在服务器完成。

    简单来讲,继承此类的对象可以跨越应用程序域边界被引用,甚至被远程引用。

    当一个对象需要长途跋涉到另一个环境中时,需要将其marshal(封送)成一个可以传输的形态(比如在.NET Remoting中对象将被打包成一个serializable的ObjRef实例——这个ByRef就是指ObjRef这种形态);同理,当打包以后传输到目标地点,还要执行unmarshal的操作将其还原为内存中的对象。

    你实际上只拥有对这个对象的一个远程引用,虽然你可以调用它的方法,但实际上这些操作都是发生在远程的(就是前面讲过的过程)。

    别外解释一下WebService,

    Web services 使用 XML 来编解码数据,并使用 SOAP(通信协议)来传输数据。大家可以发现WebService代理类的MarshalByRefObject对象的。

    remoting 是MarshByReference的,可以传变量的引用,直接对服务器对象操作。速度快,适合intranet(企业内部互联网)。
    webservice 是MarshByValue的,必须传对象的值。速度慢,可以过FIREWALL,配置比较简单,适合internet(因特网)。

    概括的说Remoting与Web Services的区别是:
    (1)既支持TCP信道又支持HTTP信道,传输速度快
    (2)即可传输XML的SOAP包又可传输二进制流,效率高
    (3)Remoteing主要用于C/S结构项目
    (4)不一定要依赖IIS服务器

    一般来说,remoting是和平台相关的,需要客户和服务器都是.NET,但可配置特性比较好,可以自定义协议。web service可以做到跨平台通信,但必须采用SOAP协议。

    从MarshalByRefObject派生的类和有[Serializable]的类都可以跨越应用程序域作为参数传递。
    从MarshalByRefObject派生的类按引用封送,有[Serializable]标志的类,按值封送。
    如果此类即从MarshalByRefObject派生,也有[Serializable]标志也是按引用封送。

     

  • 相关阅读:
    ps入门之photoshop文件操作-打开与存储认识 (PS界面介绍)如何新建文档(03)
    ps入门之ps的工作界面的认识学习(界面介绍)界面的组成(02)
    markdown编辑器Typora
    5FAE8F6F96C59ED1字体
    清除浮动float (:after方法)
    SQL中Truncate的用法
    复合索引
    RESTful API 设计指南
    两种js方法发起微信支付:WeixinJSBridge,wx.chooseWXPay区别
    nuxt.js 简述
  • 原文地址:https://www.cnblogs.com/CrabMan/p/5195377.html
Copyright © 2011-2022 走看看