远程对象的激活模式分服务端激活和客户端激活两种,(也就是对象分服务端激活对象或者说是知名对象和客户端激活对象两种)先看看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来构建一个简单但功能齐全的服务端-客户端通信模型。 首先,了解基础概念: 1. **对象激活**:...
- 在客户端激活模式下,客户端负责创建远程对象的实例,并通过 Remoting 将这个实例传递给服务器。这种方式适用于需要更多控制权的场景。 #### 三、信道 .NET Remoting 支持多种通信信道,其中最常用的是 ...
本示例将深入讲解如何建立C# Remoting服务端并实现客户端的调用,这对于构建分布式系统至关重要。 首先,我们需要理解几个关键概念: 1. **应用程序域(AppDomain)**:它是.NET运行时的安全边界,每个程序执行都在...
1. **通道(Channels)**:通道是.NET Remoting 的传输层,负责在客户端和服务端之间传递消息。常见的通道包括TCP、HTTP和 Named Pipe等。在五子棋游戏中,我们可以选择适合网络通信的TCP通道。 2. **激活...
3. **对象序列化与反序列化**:探讨.NET Remoting如何将对象转换为二进制或XML格式以便在网络中传输,以及如何恢复为原来的对象形式。 4. **通道和服务**:介绍各种通道(如HTTP、TCP、命名管道等)的作用和配置,...
- **客户端激活(Client Activated Objects)**:客户端通过创建远程对象的实例来激活服务器端的对象。 - **服务器激活(Server Activated Objects)**:服务器端预先创建好对象,等待客户端请求时使用。 - **...
.NET Remoting的核心概念包括客户端激活(Client Activated Objects)和服务端激活(Server Activated Objects)。客户端激活的对象由客户端实例化,服务端激活的对象在服务器端创建并等待客户端的请求。这两种模式...
- **身份验证与授权**:可以通过.NET的安全特性来实现客户端和服务端的身份验证,以及对远程方法调用的授权。 - **数据加密**:在敏感信息传输时,可以通过SSL等协议进行数据加密,确保通信安全。 5. **性能优化*...
《.NET Remoting与C#实现的五子棋游戏详解》 在计算机编程领域,.NET Remoting是微软.NET框架中的一项重要技术,它允许不同的应用程序域(AppDomain)之间进行通信,跨越进程甚至网络界限。C#作为.NET框架的主要...
首先,我们需要了解.NET Remoting的两种通信模式:通道和服务端。通道是通信的基础设施,负责数据传输,例如HTTP、TCP/IP或者命名管道等。服务端则包含了可供远程访问的对象,这些对象通过通道暴露给客户端。客户端...
在这种情况下,客户端可能有一个触发事件的接口,该接口通过.NET Remoting调用传递到服务端。服务端接收到事件后,可以执行相应的处理逻辑,例如记录日志、执行业务规则或者通知其他系统组件。 .NET Remoting的核心...
激活有两种主要模式:服务器端激活(Server Activation)和客户端激活(Client Activation)。 服务器端激活,也称为知名对象(Well-Known Object)。服务器在启动时会发布一个类型的实例,客户端通过URI访问这个已...
总结,.NET Remoting 中的事件处理涉及服务端订阅客户端事件、客户端订阅服务端事件和客户端订阅客户端事件三种情况。关键在于理解事件是如何通过远程对象在客户端和服务端之间传递的,以及如何正确注册和触发事件...
2. **客户端订阅服务端事件**:与之相反,服务端是事件源,客户端订阅并处理来自服务端的事件。这类似于广播机制,服务端发送的消息会被所有订阅的客户端接收。例如,服务器更新数据,所有连接的客户端都能收到通知...
通过运行这个“RemotingV1.0”的客户端和服务器程序,我们可以理解.NET Remoting的通信流程,包括对象的序列化与反序列化、消息的封装与解封装,以及如何处理跨进程或跨网络的调用异常。 7. **安全性**:在实际应用...
在本文中,我们将深入探讨 .NET Remoting 的基本概念、配置与应用。 ### 一、.NET Remoting 基本概念 1. **应用程序域(AppDomain)**:AppDomain 是 .NET 运行时的一个核心概念,它是安全边界,每个应用程序运行...
即`exampleOfRmtCAO_Improve`、`exampleOfRmtSAO_Improve`、`exampleOfRmtSAO`和`exampleOfRmtCAO`,深入解析SAO(Server Activated Object,服务器激活对象)和CAO(Client Activated Object,客户端激活对象)的...