[Remoting专题系列] 二:远程对象在分布系统中,远程对象需要跨越应用程序域进行传递,因此其表示方式会有所不同。基于性能和数据共享等原因考虑,Remoting 中远程对象可以是 "值封送对象(MBV)" 或 "引用封送对象(MBR)"
[Remoting专题系列] 二:远程对象
[Remoting专题系列] 二:远程对象MBV 机制类似于 Web 无状态请求,服务器创建对象实例传递给信道发送到客户端,而后服务器端不再继续维护其状态和生存期。而 MBR 则在其生存期内一直存活在服务器程序域中,客户端只是通过代理对象来完成调用消息传递,客户端可以通过相关接口来延长远程对象的生存期。
[Remoting专题系列] 二:远程对象
[Remoting专题系列] 二:远程对象实现 MBV 一般通过 SerializableAttribute 特性,或者实现 ISerializable 接口。运行下面的例子,我们会发现远程对象在客户端程序域内,并且不是代理对象。
[Remoting专题系列] 二:远程对象
[Remoting专题系列] 二:远程对象
using System;
[Remoting专题系列] 二:远程对象
using System.Collections;
[Remoting专题系列] 二:远程对象
using System.Collections.Generic;
[Remoting专题系列] 二:远程对象
using System.Reflection;
[Remoting专题系列] 二:远程对象
using System.Runtime.Serialization;
[Remoting专题系列] 二:远程对象
using System.Runtime.Serialization.Formatters;
[Remoting专题系列] 二:远程对象
using System.Runtime.Serialization.Formatters.Binary;
[Remoting专题系列] 二:远程对象
using System.Runtime.CompilerServices;
[Remoting专题系列] 二:远程对象
using System.Runtime.Remoting;
[Remoting专题系列] 二:远程对象
using System.Runtime.Remoting.Channels;
[Remoting专题系列] 二:远程对象
using System.Runtime.Remoting.Channels.Tcp;
[Remoting专题系列] 二:远程对象
using System.Runtime.Remoting.Messaging;
[Remoting专题系列] 二:远程对象
[Remoting专题系列] 二:远程对象
namespace Learn.Library.Remoting
MBV 传递完整的副本到客户端,而后的所有调用都是在客户端程序域内进行,不再需要跨域的往返过程。但完整复制和序列化需要更多的资源和往返时间,因此不适合较大的对象,同时无法在多个客户端间共享信息。而 MBR 的所有调用都是通过代理进行的,因此往返过程比较多,但因执行过程都在服务器端进行,其整体性能还是非常高的。在系统设计时可以针对不同的应用采取不同的选择。 

相关文章: