Remoting是一种分布式处理方式,从微软的产品角度看,remoting是DCOM的升级,改善了许多功能,并极好的融合到.net下。.NET
Remoting 提供一种允许对象通过应用程序域与另一种对象进行交互的框架。在windows操作系统中,是将应用程序分离为单独得进程,这个进程形成了应用程序代码和数据周围的一道边界。如果不采用进程间通信(RPC)机制,则在一个进程中的代码就不能访问另一个进程,这是操作系统对应用程序的保护机制,然而在一些情况下我们需要跨越应用程序域和另一个应用程序域进行通信,即穿越边界。
在Remoting中是通过管道Channel来实现两个应用程序域之间对象的通信。首先,客户端通Remoting,访问通道以获得服务端对象,在通过代理解析为客户端对象,这就提供了一种可能性,即以服务的方式发布服务器对象,远程对象代码可以运行在服务器上(如服务器激活的对象和客户端激活的对象),然后客户端在通过renoting 连接服务器,获得该服务对象并通过序列化在客户端运行。
在Remoting中,对于要传递的对象,设计者除了需要了解通道的类型和端口号以外,无需了解数据包的格式。但必须注意的是,客户端在获取服务器端对象时并不是获得实际的服务端对象,而是获得它的引用,这紧保证了客户端和服务器端有关对象的宋耦合性,也优化了通信性能
Remoting的两种通道:有两种:TCP和HTTP。TCP通道提供基于Socket的传输工具,使用Tcp协议来跨越Remoting边界传输序列化的消息流。TcpChannel类型默认使用二进制格式序列化消息对象,因此具有更高的传输性能。HttpChannel使用Soap格式序列化消息对象,因此具有更好的互操作性。通常在局域网内,更多使用Tcpchannel,如果要穿越防火墙,使用Httpchannel
远程对象激活方式:
在访问远程类型的一个对象实例以前,必须通过一个名为Activation的进程创建它并进行初始化。这种客户端通过通道来创建远程对象,成为对象的激活。在Remoting中,远程对象的激活分为两大类:服务器激活和客户端激活
服务器激活:又叫wellknown方式,也译为知名对象。因为服务器应用程序在激活对象实例以前会在一个宗所周知的统一资源标识符(URI)上来发布对象。.NET Remoting把服务器端激活又分为SingleTon模式和SingleCall模式两种。
SingleTon模式:此为由状态模式。如果设置为SingleTon激活方式,则Remoting将为所以客户端建立同一个对象实例。当对象处于活动状态时,SingleTon实例会处理所有后来的客户端访问请求,而不管他们是同一客户端,还是其他客户端。SingleTon实例将在方法中一直维持其状态。例如,如果一个远程 对象有一个累加方法(i=0;i++),被多个客户端同时调用,则第一个客户端获得的值为1 ,第二个为2,因为他们获得的对象实例相同,如果熟悉ASP.NET的状态管理,我们可以认为它是一种Application状态。
SingCall模式:是一种无状态模式。一旦设置为SingCall模式,则当客户端调用远程对象方法时,Remoting会为每一个客户端建立一个远程对象实例,至于对象实例销毁是由GC自动管理的。同上一个例子而言,远程访问的每一个客户端的值都是1。我们可以认为它是一种Session状态。
客户端激活:Remoting在激活每个对象实例时,会给每个客户端激活的类型指派一个URI。客户端激活模式一旦获得客户端的请求,将为每一个客户端都建立一个实例引用。SingCall模式和客户端激活是有区别的:首先,对象实例创建的时间不一样。客户端激活方式是客户一旦发出调用的请求 ,就实例化;而SingCall模式则是要等到调用对象方法时在创建。其次,SingCall模式激活的对象是无状态的,对象生命期的管理是由GC管理的,而客户端激活是有状态的,其生命周期可以自定义。其三, 两种激活模式在服务器和客户端的实现不一样。尤其在客户端,SingCall模式是由GetObject()激活,它调用对象默认构造函数,而客户端激活模式,则通过createInstance()来激活,它可以传递参数,可以调用自定义的构造函数来创建实例。
浙公网安备 33010602011771号