.NET Remoting——practice & progress(2):WellKnown已知类型

来源:互联网 发布:java constructor类型 编辑:程序博客网 时间:2024/06/06 08:51
  为将Remote Object注册到服务器端,并且让客户端可以创建并使用该远程对象,可采用服务器端激活和客户端激活模式。

       当服务器端将远程对象注册到服务器端时,远程对象并没有实例化。当客户端获取远程对象时,远程对象仍然没有实例化。只有当客户端调用远程对象方法时,远程对象才会在服务器端生成实例化对象。

       服务器端激活模式又分为SingletonSingleCall两种模式:

       ØSingleton

       Singleton从字面上很容易获知,当选择Singleton模式时,在服务器端的远程对象将会有零或至多一个实例化对象。

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

       RemotingConfiguration.RegisterWellKnownServiceType(typeof(Calculator),
"CalculatorService", WellKnownObjectMode.Singleton);

       服务器端注册远程对象的配置文件事例如下:

<wellknown mode="Singleton"                    type="Inovout.Remoting.RemotingObject.Calculator,RemotingObjectClassLibrary" 
                objectUri="CalculatorService"/>

客户端获取远程对象的代码事例如下:

calculator = (Calculator)Activator.GetObject(
typeof(Calculator), "tcp://localhost:8891/CalculatorService");

客户端获取远程对象的配置事例如下:

<wellknown 
          type="Inovout.Remoting.RemotingObject.Calculator,RemotingObjectClassLibrary" 
          url="tcp://localhost:8891/CalculatorService" />
Calculator calculator = new Calculator();

       客户端运行结果效果图
Singletom客户端运行效果图

 

       ØSingleCall

       SingleCallSingleton的不同在于,SingleCall可以在客户端调用远程对象方法时,为每个客户端生成远程对象实例对象。但是,当远程对象方法调用完成后,刚生成的远程对象实例化对象会立即销毁。当下次再次调用远程对象方法,会再次生成远程对象实例化对象。

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

RemotingConfiguration.RegisterWellKnownServiceType(typeof(Calculator),
"CalculatorService", WellKnownObjectMode. SingleCall);

       服务器端注册远程对象的配置文件事例如下:

<wellknown mode="SingleCall"                                   type="Inovout.Remoting.RemotingObject.Calculator,RemotingObjectClassLibrary" 
                objectUri="CalculatorService"/>

       客户端获取远程对象的代码事例如下:

       Calculator calculator = (Calculator)Activator.GetObject(
typeof(Calculator), "tcp://localhost:8891/CalculatorService");

       客户端获取远程对象的配置事例如下:

<wellknown 
         type="Inovout.Remoting.RemotingObject.Calculator,RemotingObjectClassLibrary" 
          url="tcp://localhost:8891/CalculatorService" />
calculator = new Calculator();

       客户端运行结果效果图
SingleCall客户端运行效果图

 

       服务器激活模式对于客户端而言,所有代码完全相同,原因很容易解释。因为在这种激活模式下,是由服务器端来决定远程对象相关信息和状态。但是,由于.NET Remoting为开发人员做了非常好的封装,也使开发人员非常容易完成SingletonSingleCall两种服务器激活模式的注册工作,而且两种模式的代码几乎完全一样。两种服务器激活模式具体不同点如下:

比例项目

Singleton

SingleCall

实例化对象个数

1

为每个客户端生成一个实例化对象

生存周期

由服务器端租约决定

调用完方法后立即销毁

状态

 

原创粉丝点击