技术开发 频道

一步一步学Remoting:复杂对象


【IT168技术文档】

  这里说的复杂对象是比较复杂的类的实例,比如说我们在应用中经常使用的DataSet,我们自己的类等,通常我们会给远程的对象传递一些自己的类,或者要求对象返回处理的结果,这个时候通常也就是需要远程对象有状态,上次我们说了几种激活模式提到说只有客户端激活和Singleton是有状态的,而客户端激活和 Singleton区别在于Singleton是共享对象的。因此我们可以选择符合自己条件的激活方式:
  状态 拥有各自实例
  Singleton 有 无
  SingleCall 无 有
  客户端激活 有 有

  在这里,我们先演示自定义类的传入传出:
  先说一个概念:MBV就是按值编码,对象存储在数据流中,用于在网络另外一端创建对象副本。MBR就是按引用编组,在客户机上创建代理,远程对象创建ObjRef实例,实例被串行化传递。

  我们先来修改一下远程对象:
using System; namespace RemoteObject { public class MyObject:MarshalByRefObject { private MBV _mbv; private MBR _mbr; public int Add(int a,int b) { return a+b; } public MBV GetMBV() { return new MBV(100); } public MBR GetMBR() { return new MBR(200); } public void SetMBV(MBV mbv) { this._mbv=mbv; } public int UseMBV() { return this._mbv.Data; } public void SetMBR(MBR mbr) { this._mbr=mbr; } public int UseMBR() { return this._mbr.Data; } } [Serializable] public class MBV { private int _data; public MBV(int data) { this._data=data; } public int Data { get { return this._data; } set { this._data=value; } } } public class MBR:MarshalByRefObject { private int _data; public MBR(int data) { this._data=data; } public int Data { get { return this._data; } set { this._data=value; } } } }
0
相关文章