Remoting 1
- 1. what is Remoting
我们可以将其看做一种分布式处理方式。提供了一种运行对象通过应用程序域与另一对象进行交互的框架。这也正是我们使用remoting的原因。
- 2. Remoting的两种通道
TCP 和HTTP. System.Rumtime.Remoting.Channel中定义了IChannel接口
TCP :System.Rumtime.Remoting.Channel.TCp空间下
TCPChannel提供了基于Socket的传输工具。使用TCP协议跨越Remoting边界传输序列化的消息流。TCP默认使用二进制格式序列化消息对象。因此具有更高的传输性能。
HTTP :System.Rumtime.Remoting.Channel.http空间下
HTTPChannel提供了一种使用HTTP协议。使其能在Internet上穿越防火墙传输二进制序列化消息流。默认情况下。HttpChannel类型使用SOAP格式序列化消息对象。因此他具有更好的互操作性!局域网内一般使用TcpChannel ,如果要穿越防火墙。就要使用HttpChannel
- 3. 远程对象的激活方式
在访问远程一个对象实例之前,必须通过一个名为Activation的进程创建它并进行初始化。这种客户端通过通道来创建远程对象。称为对象的激活。在Remoting中,远程对象分为两大类。服务器端激活和客户端激活
(1).服务器端激活
又称wellKnow模式。很多又翻译称知明对象。为什么称为知名对象激活模式呢。是因为服务器应用程序在激活对象实例之前会在一个众所周知的统一资源标识符(URI)上发布这个类型。然后该服务器进程会为此类型配置一个wellknow对象。并根据指定的端口或地址来发布对象。.remoting 把服务器端激活又分为SingleTon模式和SingleCall两种模式
SingleTon(有状态模式)
如果设置为一个SingleTon激活方式。则Remoting将为所有的客户端建立同一个对象实例。当对象处于活动状态时,SingleTon实例会处理所有后来的客户端访问请求。而不管他们是不是在同一个客户端,还是其它客户端。SingleTon实例将会在方法中一直维持其状态。如果一个远程对象有一个累加方法(i=0;i++).第一个获得是1.第二个获得的是2.因为他们获得的对象是相同的。如果熟悉ASP.NET的状态管理,我们可以理解为它是一种Applcation状态
SingleCall(无状态模式)
如果设置成SingleCall模式,则当客户端调用远程对象方式时。SingleCall会为每一个客户端建立一个访问对象实例。对象的实例的销毁使用GC自动管理的。同上一个列子。则访问的对象获取的都是1.也可以借用asp.net的状态管理。认为他是一种Session状态。
(2).客户端激活
与wellKnow模式不同。Remoting在激活每个实例的时候。会给每个客户端激活的类型指定一个资源标识符(URI).客户端模式一旦活的客户端的请求。将为每一个客户端都建立一个实例引用。SingleCall模式和客户端激活模式是有区别的。
客户端模式与SingleCall的区别:
(1) .创建时间的不同。:SingleCall是要等调用远程方法的时候创建。而客户端激活模式是在请求的时候就创建。
(2) .状态的不同。SingleCall是无状态的。而客户端激活模式是有状态的。
(3).生命周期的不同。SingleCall是由GC自动管理的。而客户端激活模式的什么周期是可以自定义的的。
(4).客户端和服务器端的实现方式不一样。尤其在客户端.SingleCall是用GetObject()来激活。它调用对象默认的构造函数。而客户端激活模式。则通过CreateInstance()来激活。可以传递多个参数。所以可以调用自定义的构造函数来创建实例