远程对象激活模式是指分别在服务器和客户端如何创建远程对象,主要分为服务器激活和客户端激活一、服务器端激活 1、服务端:使用 RemotingConfiguration类的静态函数RegisterWellKnownServiceType()来注册远程对象。 函数原型 public static void RegisterWellKnownServiceType(Type type, string objectUri, WellKnownObjectMode mode); 参数: // type: // 对象 System.Type。 // // objectUri: // 对象 URI。 // // mode: // 正在被注册的已知对象类型的激活方式。(请参见 System.Runtime.Remoting.WellKnownObjectMode。) WellKnownObjectMode又分为: Singleton模式:每个传入的消息由同一个对象实例提供服务。 SingleCall模式:每个传入的消息由新的对象实例提供服务。 2、客户端: 1)可使用RemotingConfiguration类的静态函数RegisterWellKnownClientType()来注册远程对象,然后可用new 获取对远程对象实例的引用。 参数: type: 对象 System.Type。 objectUrl: 已知客户端对象的 URL。 2)使用Activator.GetObject()可获取对远程对象的引用。参数同上 二、客户端激活: 1、服务端: 用RemotingConfiguration类的静态函数RegisterActivatedServiceType()注册远程对象,用其属性ApplicationName设置对象 URI. 2、客户端: 1) 用RemotingConfiguration类的静态函数RegisterActivatedClientType(Type type, string appUrl);注册远程对象,然后可以new获取远程对象实例的引用。 2) 用Activator.CreateInstanceCreateInstance(Type type, params object[] args)可以非缺省远程对象。CreateInstance有多个重载方式。三、区别 1、服务器端激活对象被称为服务器激活的,因为当客户端使用new,只有一个代理被创建。实际对象直到通过代理来调用一个方法时才被创建(激活)。换句话说,不是客户端决定什么时候去创建物理上的真正对象。客户端激活对象在客户端使用new时就在服务器上创建。 2、第二个差别是客户端激活对象可以使用非缺省构造函数(带参数的构造函数)激活。服务器端激活对象不支持非缺省构造函数,因为使用new只是创建一个代理,并没有创建对应的实际对象。客户端激活对象可以通过new同时创建代理和对象。 3、第三个差别是客户端和对象是如何联系在一起的。当注册服务器激活对象时,你可以指定激活模式来决定为每一个请求创建一个对象实例还是创建一个对象实例来服务所有的请求。这两中激活模式是: WellKnownObjectMode.SingleCall:为每个请求创建一个唯一的对象实例。 WellKonwnObjectMode.Singleton:创建一个对象实例来服务所有的请求
.Net Remoting 技术入门之远程对象激活模式
最新推荐文章于 2023-01-05 16:04:16 发布