远程对象的激活模式分服务端激活和客户端激活两种,(也就是对象分服务端激活对象或者说是知名对象和客户端激活对象两种)先看看msdn怎么描述服务端激活的:
服务器激活的对象是其生存期由服务器直接控制的对象。服务器应用程序域只有在客户端在对象上进行方法调用时才创建这些对象,而不会在客户端调用 new 或 Activator.GetObject 时创建这些对象;这节省了仅为创建实例而进行的一次网络往返过程。客户端请求服务器激活的类型实例时,只在客户端应用程序域中创建一个代理。
在服务端激活模式下,客户端的代码基本相同,都是通过Activator.GetObject 获取远程对象,而在服务端激活的对象有三种激活模式:Singleton ;SingleCall;publish。
Singleton 类型任何时候都不会同时具有多个实例。如果存在实例,所有客户端请求都由该实例提供服务。如果不存在实例,服务器将创建一个实例,而所有后继的客户端请求都将由该实例来提供服务。由于 Singleton 类型具有关联的默认生存期,即使任何时候都不会有一个以上的可用实例,客户端也不会总接收到对可远程处理的类的同一实例的引用。
SingleCall 远程服务器类型总是为每个客户端请求设置一个实例。下一个方法调用将改由其他实例进行服务。从设计角度看,SingleCall 类型提供的功能非常简单。这种机制不提供状态管理,如果您需要状态管理,这将是一个不利之处;如果您不需要,这种机制将非常理想。也许您只关心负载平衡和可伸缩性而不关心状态,那么在这种情况下,这种模式将是您理想的选择,因为对于每个请求都只有一个实例。如果愿意,开发人员可以向 SingleCall 对象提供自己的状态管理,但这种状态数据不会驻留在对象中,因为每次调用新的方法时都将实例化一个新的对象标识。
publish方式可以在服务器主动的创建远程对象,并且可以使用带参数的构造方法,在这种情况下客户端试图访问远程对象之前,对象就已经生成。
客户端激活的对象是其生存期由调用应用程序域控制的对象,正如对象对于客户端是本地对象时对象的生存期由调用应用程序域控制一样。对于客户端激活,当客户端试图创建服务器对象的实例时发生一个到服务器的往返过程,而客户端代理是使用对象引用 (ObjRef) 创建的,该对象引用是从在服务器上创建远程对象返回时获取的。每当客户端创建客户端激活的类型的实例时,该实例都将只服务于该特定客户端中的特定引用,直到其租约到期并回收其内存为止。如果调用应用程序域创建两个远程类型的新实例,每个客户端引用都将只调用从其中返回引用的服务器应用程序域中的特定实例。
理解一下,可以归纳出
1、客户端激活的时间是在客户端请求的时候,而服务端激活远程对象的时间是在调用对象方法的时候
2、客户端激活可以调用自定义的构造方法,而不像服务端激活只能使用默认的构造方法。服务器激活只有publish方式才能够使用自定义的构造方法
3、因此,客户端激活模式一旦获得客户端的请求,将为每一个客户端都建立一个实例引用。
总结:
1、Remoting支持两种远程对象:知名的和客户激活的。知名的远程对象使用了uri作为标识,客户程序使用这个uri来访问那些远程对象,也正式为什么称作知名的原因。对知名的对象来说2种使用模式:SingleCall和Singleton,对于前者每次调用都会新建对象,因此对象是无状态的。对于后者,对象只被创建一次,所有客户共享对象状态,因此对象是有状态的。另外一种客户端激活对象使用类的类型来激活,uri再后台被动态创建,并且返回给客户程序。客户激活对象是有状态的。
2、对于Singleton对象来说需要考虑伸缩性,Singleton对象不能在多个服务器上被部署,如果要跨服务器就不能使用Singleton了。
分享到:
相关推荐
的确,初接触.NET Remoting的人多半会有这样的疑问,因为大部分的文章和书籍在介绍.NET Remoting时都只介绍了通道,对象,激活和生存周期等等概念,在谈到如何进行远程通信的时候,都只告诉读者如何从客户端激活一个...
Net Remoting实现简单的服务端客户端双向通信
Microsoft .NET RemotingMicrosoft .NET Remoting Microsoft .NET RemotingMicrosoft .NET Remoting Microsoft .NET RemotingMicrosoft .NET Remoting
VB.NET Remoting 技术手册VB.NET Remoting 技术手册
如何用.net Remoting实现一个客户端连接多个服务器端 .doc
Advanced .NET Remoting.pdf
C# .Net Remoting 两个简单示例,一个为普通的,一个为工厂模式的,更为安全一点.简单范例却是打好了一个框架,想要做东西,扩展就可以了. 使用说明和运行截图:http://www.our-code.com/news/2010105/n4920152.html 关于2...
一个很简单的.net remoting 实例,如果你懂得这种技术建议你就不用下了,这个只是知道.net remoting ,但是不知道什么原理的同学下载学些...代码包含服务端、客户端和接口实例。简单的描述了.net remoting 的运行原理。
一个.NET Remoting的简单实例,源码,打开即用,适合新手和做测试的相关技术人员。
Microsoft .Net Remoting系列专题
.Net Remoting技术.pdf
演示如何使用.net Remoting示例,从而更好的学习和使用.net Remoting
C# remoting服务端建立与客户端的调用示例,分享给大家,共同学习。
基于.NET Remoting实现了一个工作在局域网的聊天室程序,包含一个.NET SVR,客户端(窗口程序)。 程序充分演绎了.net remoting事件双向订阅的应用方法。
介绍.net下的Remoting技术. Microsoft .Net Remoting系列专题之一
.Net Remoting非常简单范例代码
一个C#.NET Remoting示例 ChannelServices.RegisterChannel(new TcpChannel(9090), true); RemotingConfiguration.ApplicationName = "HelloServiceApplication"; RemotingConfiguration....
基于.NET Remoting的分布式系统实现.pdf
Advanced .NET Remoting_2nd.pdf
深度挖掘.NET Framework 2.0(8):实战.NET Remoting(下)