.Net 远程技术 初步学习
一、
在Remoting中是通过通道(channel)来实现两个应用程序域之间对象的通信的,首先,客户端通过Remoting,访问通道以获得服务端对象,再通过代理解析为客户端对象,但必须注意的是,客户端在获取服务器端对象时,并不是获得实际的服务端对象,而是获得它的引用
Remoting的两种通道:TCPChannel (System.Runtime.Remoting.Channel.Tcp)Tcp通道提供了基于socket的传输工具,使用tcp协议 来跨越remoting边界,传输序列化的消息流,tcp通道默认使用二进制格式序列化消息对象;HttpChannel (System.Runtime.Remoting.Channel.Http) 它提供了一种基于internet协议,使其能在internet上穿越防火墙传输序列化的消息流,http通道使用soap格式序列化消息对象;一般在局域网,使用tcpChannel ,如果要穿越防火墙,则使用httpChannel
客户端通过通道来创建远程对象,称为对象的激活;远程对象的激活分为:服务器端激活(WellKnow方式)、客户端激活
. Net Remoting把服务器端激活又分为SingleTon模式和SingleCall模式两种。
SingleTon模式:此为有状态模式,即为所有客户端创建同一个对象实例
SingleCall模式:一种无状态模式。一旦设置为SingleCall模式,则当客户端调用远程对象的方法时, Remoting会为每一个client端建立一个远程对象实例,至于对象实例的销毁则是由GC(垃圾回收机制)自动管理的。
二、
客户端激活 :客户端激活模式一旦获得客户端的请求,将为每一个客户端都建立一个实例引用。
SingleCall 和客户端激活的区别“
(1) 创建对象实例的时间不同
SingleCall:调用对象方法时再创建
客户端激活:客户端一旦发出调用请求,就实例化
(2)对象状态
SingleCall:对象是无状态的,对象生命周期的管理有GC控制
客户端激活: 对象有状态,生命周期可以自定义
(3)激活模式的实现方法
服务器端:SingleCall模式是由 GetObject()来激活,调用对象默认的构造函数
客户端: CreateInstance()来激活,可以调用自定义的构造函数来创建实例
三、远程对象的定义
由于Remoting传递的对象是以引用的方式,因此所传递的远程对象类必须继承MarshalByRefObject(MarshalByRefObject 是那些通过使用代理交换消息来跨越应用程序域边界进行通信的对象的基类)
代码如下:(添加System.Runtime.Remoting的引用)