单例和客户端激活对象(CAO),Remoitng

时间:2010-07-06 06:45:44

标签: .net singleton remoting .net-remoting

两者都执行相同的操作

MSDN

  • Singleton:“”Single Call对象只为一个请求提供服务....“
  • CAO:“客户端激活的对象(CAO)是服务器端对象,根据客户端的请求激活....”

在这两种情况下,数据都不是共享的,但是一旦客户端可以连接一次只能在单例中,为什么会有人想要这样做 在什么情况下,Singleton有用,它们之间是否存在更多差异?

1 个答案:

答案 0 :(得分:3)

你错过了线条。这是MSDN的定义。我强调(粗体)这些对象之间的一些差异。

  
      
  • 单次通话

         

    单个呼叫对象服务一个且只有一个请求进入。单   调用对象在场景中很有用   对象需要在哪里做   有限的工作量。 单一电话   通常不需要对象   存储状态信息,以及它们   不能持有国家之间的信息   方法调用。但是,单呼   可以在一个对象中配置对象   负载均衡的时尚。

  •   
  • 单身对象

         

    Singleton对象是为多个客户端提供服务的对象   因此通过存储状态来共享数据   客户之间的信息   调用即可。它们在案例中很有用   其中需要共享数据   明确地在客户之间和在   创造和开销的开销   保持物品是非常重要的。

  •   
  • 客户端激活的对象(CAO)

         

    客户端激活的对象(CAO)是服务器端对象   根据要求激活   客户端即可。这种激活服务器的方式   对象与经典非常相似   COM coclass激活。当。。。的时候   客户端提交服务器请求   使用“new”运算符的对象   激活请求消息被发送到   远程应用程序。服务器   然后创建一个实例   请求类并返回一个ObjRef   回到客户端应用程序   调用它。然后创建代理   客户端使用ObjRef。该   客户端的方法调用将被执行   在代理上。 客户端激活的对象   可以存储状态信息   方法调用其特定客户端   而不是跨越不同的客户   对象即可。每次调用“新”   将代理返回给独立的   服务器类型的实例。

  •   

状态信息是您存储在对象的变量或属性中的一些数据,用于处理客户端请求。

由于单个调用对象是在客户端请求它执行某些工作时创建的,并且在它完成工作后被销毁,因此它无法保存状态信息,导致每个请求创建一个新对象(It可以在数据源中加载和存储数据,使其正常工作)。

只要服务器进程正在运行, Singleton对象只会创建一次(可能是在服务器starup)和生命周期。它可以将信息存储在变量和属性中以处理客户端请求,导致每个客户端使用同一个对象,并且在客户端调用后不会销毁它。

显示单个调用和单个对象之间的差异的一个简单示例是创建一个方法Increment()来增加对象中的变量(整数)并将变量写入控制台。单个调用对象将始终向控制台输出相同的值(如果变量以0开头,则为1),而单例对象将在每次调用后始终打印递增的值(1,2,3等)。