2)远程对象的激活方式
在访问远程类型的一个对象实例之前,必须通过一个名为Activation 的进程创建它并进
行初始化。这种客户端通过通道来创建远程对象,称为对象的激活。在Remoting 中,远程
对象的激活分为两大类:服务器端激活和客户端激活。
(1) 服务器端激活,又叫做WellKnow 方式,很多又翻译为知名对象。为什么称为知名
对象激活模式呢?是因为服务器应用程序在激活对象实例之前会在一个众所周知的统一资
源标识符(URI)上来发布这个类型。然后该服务器进程会为此类型配置一个WellKnown 对象,
并根据指定的端口或地址来发布对象。.Net Remoting 把服务器端激活又分为SingleTon 模式
和SingleCall 模式两种。
SingleTon 模式:此为有状态模式。如果设置为SingleTon 激活方式,则Remoting 将为
所有客户端建立同一个对象实例。当对象处于活动状态时,SingleTon 实例会处理所有后来
的客户端访问请求,而不管它们是同一个客户端,还是其他客户端。SingleTon 实例将在方
法调用中一直维持其状态。举例来说,如果一个远程对象有一个累加方法(i=0;++i),被
多个客户端(例如两个)调用。如果设置为SingleTon 方式,则第一个客户获得值为1,第
二个客户获得值为2,因为他们获得的对象实例是相同的。如果熟悉Asp.Net 的状态管理,
我们可以认为它是一种Application 状态。
SingleCall 模式:SingleCall 是一种无状态模式。一旦设置为SingleCall 模式,则当客户
端调用远程对象的方法时,Remoting 会为每一个客户端建立一个远程对象实例,至于对象
实例的销毁则是由GC 自动管理的。同上一个例子而言,则访问远程对象的两个客户获得的都是1。我们仍然可以借鉴Asp.Net 的状态管理,认为它是一种Session 状态。
(2) 客户端激活。与WellKnown 模式不同,Remoting 在激活每个对象实例的时候,会
给每个客户端激活的类型指派一个URI。客户端激活模式一旦获得客户端的请求,将为每一
个客户端都建立一个实例引用。SingleCall 模式和客户端激活模式是有区别的:首先,对象
实例创建的时间不一样。客户端激活方式是客户一旦发出调用的请求,就实例化;而
SingleCall 则是要等到调用对象方法时再创建。其次,SingleCall 模式激活的对象是无状态的,
对象生命期的管理是由GC 管理的,而客户端激活的对象则有状态,其生命周期可自定义。
其三,两种激活模式在服务器端和客户端实现的方法不一样。尤其是在客户端,SingleCall
模式是由GetObject()来激活,它调用对象默认的构造函数。而客户端激活模式,则通过
CreateInstance()来激活,它可以传递参数,所以可以调用自定义的构造函数来创建实例。