这里说的复杂对象是比较复杂的类的实例,比如说我们在应用中经常使用的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; |