您的位置:首页 > 理论基础 > 计算机网络

.NET Remoting——practice & progress(3):Client Activated客户端激活

2008-04-07 12:07 344 查看
 .NET Remoting除了提供了服务器端激活模式之外,还提供了客户端激活模式。服务器端激活模式有Singleton和SingleCall两种方式。但是,这两种方式都有由非常明显的优缺点,Remote Object在服务器端不能同时满足既可以维护其状态(SingleCall模式,当远程对象方法被调用完成后,该远程对象会立即被服务器端消毁),可以为每个客户端生成一个远程对象,每个对象保持其相应的独立性(Singleton只能生成一个远程对象实例,所有客户端都共享同一个远程对象实例)。客户端激活模式就是解决这两个问题。
          当服务器端将远程对象注册到服务器端时,远程对象并没有实例化。当客户端获取远程对象时,远程对象被实例化,而且支持参数化的构造,这点与服务器端激活模式是显著的不同。而且,服务器端激活模式只支持默认构造函数。

          服务器端注册远程对象的代码事例如下:

          //服务器端激活模式只能提供默认构造器的远程对象实例。客户端激活模式支持带参构造,并且向服务器环境注册时,又必须是已实例化的对象。因此,没有URI也不能有URI,注册时,服务器端根本无法不知道客户端会选择哪种构造器实例化远程对象。
          RemotingConfiguration.ApplicationName = "CalculatorService";
          //因为注册时,并没有提供URI,所以需设置RemotingConfiguration的ApplicationName,以便让客户端找到该远程对象。
          RemotingConfiguration.RegisterActivatedServiceType(typeof(Calculator));
          服务器端注册远程对象的配置文件事例如下:

    <application name="CalculatorService">
      <service>
        <activated type="Inovout.Remoting.RemotingObject.Calculator,RemotingObjectClassLibrary"/>
      </service>
          客户端获取远程对象的代码事例如下:

          object[] activatorAttribute = {new UrlAttribute("tcp://localhost:8891/CalculatorService")};
                Calculator calculator = (Calculator)Activator.CreateInstance(
                             typeof(Calculator), null, activatorAttribute);
          客户端获取远程对象的配置事例如下:

      <client url="tcp://localhost:8891/CalculatorService">
        <activated type="Inovout.Remoting.RemotingObject.Calculator,RemotingObjectClassLibrary"/>
      </client>
          客户端运行结果效果图



 

          客户端激活模式相对于服务器端激活模式,具有非常灵活的特性,几乎与本地对象没有区别。但是这是以牺牲服务器端资源为代价的。服务器端模式无论是Singleton还是SingleCall都是远程对象方法被调用时才会被实例化,Singleton至多只会有一个实例,SingleCall干脆就不会存在。但是,选择客户端模式激活的远程对象是在new的时候就被创建实例化对象,而且会为每个客户端生成一个远程对象实例。

          服务器激活模式与客户端激活模式比较如下:

比较项目
服务器端激活
客户端激活
实例化对象时间
远程对象方法被调用
New的时候
实例化对象个数
Singleton至多有1个/SingleCall多个
多个
构造函数
默认空构造函数
支持参数化构造
状态
Singleton有状态/SingleCall无状态
可以进行状态管理
占用服务器资源
不大
较大
          客户端激活模式支持参数化构
4000
造函数,这对于开发人员来说是非常重要的特性,非常有利于开发人员采用面向对象思想来设计和开发.NET Remoting(为达到维护远程对象完全可以通过相关方法来实现,但那些都不是面向对象思想的体现)。

 

?疑问:客户端激活模式的URL和URI设置感觉不是很方便,特别别扭,不知道为什么.NET Remoting不能提供象服务器端激活模式那样的设置方式吗?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐