细细品味C#——.NetRemoting专题精华集锦csAxp虾皮工作室年11月1日创建时间:2011/11/1修改时间:2011/11/1修改次数:0河北工业大学——软件工程与理论实验室编辑:虾皮1目录1.1、版权声明...............................................................................................................21.2、内容详情...............................................................................................................21.2.1.NetRemoting基础.................................................................................21.2.2Marshal、Disconnect与生命周期以及跟踪服务...............................171.2.3Remoting事件处理全接触...................................................................251.2.4关于Remoting......................................................................................431.2.5关于Remoting(续)..........................................................................531.2.6关于Remoting一些更改......................................................................571.2.7Remoting的几个疑惑...........................................................................591.2.8Remoting疑惑续集...............................................................................601.2.9Remoting疑惑续集之再续...................................................................621.2.10基于消息与.NetRemoting的分布式处理架构.................................661.2.11.NetRemoting测试小技巧.................................................................781.2.12.NETRemoting中的通道注册...........................................................801.2.13在Remoting客户端激活用替换类以分离接口与实现.....................812.1、版权声明.............................................................................................................842.2、内容详情.............................................................................................................842.2.1一步一步学Remoting之一:从简单开始..........................................842.2.2一步一步学Remoting之二:激活模式..............................................872.2.3一步一步学Remoting之三:复杂对象..............................................922.2.4一步一步学Remoting之四:承载方式(1)....................................972.2.5一步一步学Remoting之四:承载方式(2)..................................1012.2.6一步一步学Remoting之五:异步操作............................................1052.2.7一步一步学Remoting之六:事件(1)..........................................1102.2.8一步一步学Remoting之六:事件(2)..........................................1173.1、版权声明...........................................................................................................1233.2、内容详情...........................................................................................................1233.2.1Remoting基本原理及其扩展机制(上).........................................1233.2.2Remoting基本原理及其扩展机制(中).........................................1283.2.3Remoting基本原理及其扩展机制(下).........................................134创建时间:2011/11/1修改时间:2011/11/1修改次数:0河北工业大学——软件工程与理论实验室编辑:虾皮21.1、版权声明文章出处:文章作者:TW张逸1.2、内容详情1.2.1.NetRemoting基础【1】Remoting基础什么是Remoting,简而言之,我们可以将其看作是一种分布式处理方式。从微软的产品角度来看,可以说Remoting就是DCOM的一种升级,它改善了很多功能,并极好的融合到.Net平台下。Microsoft?.NETRemoting提供了一种允许对象通过应用程序域与另一对象进行交互的框架。这也正是我们使用Remoting的原因。为什么呢?在Windows操作系统中,是将应用程序分离为单独的进程。这个进程形成了应用程序代码和数据周围的一道边界。如果不采用进程间通信(RPC)机制,则在一个进程中执行的代码就不能访问另一进程。这是一种操作系统对应用程序的保护机制。然而在某些情况下,我们需要跨过应用程序域,与另外的应用程序域进行通信,即穿越边界。在Remoting中是通过通道(channel)来实现两个应用程序域之间对象的通信的。如图所示:首先,客户端通过Remoting,访问通道以获得服务端对象,再通过代理解析为客户端对象。这就提供一种可能性,即以服务的方式来发布服务器对象。远程对象代码可以运行在服务器上(如服务器激活的对象和客户端激活的对象),然后客户端再通过Remoting连接服创建时间:2011/11/1修改时间:2011/11/1修改次数:0河北工业大学——软件工程与理论实验室编辑:虾皮3务器,获得该服务对象并通过序列化在客户端运行。在Remoting中,对于要传递的对象,设计者除了需要了解通道的类型和端口号之外,无需再了解数据包的格式。但必须注意的是,客户端在获取服务器端对象时,并不是获得实际的服务端对象,而是获得它的引用。这既保证了客户端和服务器端有关对象的松散耦合,同时也优化了通信的性能。1)Remoting的两种通道Remoting的通道主要有两种:Tcp和Http。在.Net中,System.Runtime.Remoting.Channel中定义了IChannel接口。IChannel接口包括了TcpChannel通道类型和Http通道类型。它们分别对应Remoting通道的这两种类型。TcpChannel类型放在名字空间System.Runtime.Remoting.Channel.Tcp中。Tcp通道提供了基于Socket的传输工具,使用Tcp协议来跨越Remoting边界传输序列化的消息流。TcpChannel类型默认使用二进制格式序列化消息对象,因此它具有更高的传输性能。HttpChannel类型放在名字空间System.Runtime.Remoting.Channel.Http中。它提供了一种使用Http协议,使其能在Internet上穿越防火墙传输序列化消息流。默认情况下,HttpChannel类型使用Soap格式序列化消息对象,因此它具有更好的互操作性。通常在局域网内,我们更多地使用TcpChannel;如果要穿越防火墙,则使用HttpChannel。2)远程对象的激活方式在访问远程类型的一个对象实例之前,必须通过一个名为Activation的进程创建它并进行初始化。这种客户端通过通道来创建远程对象,称为对象的激活。在Remoting中,远程对象的激活分为两大类:服务器端激活和客户端激活。(1)服务器端激活,又叫做WellKnow方式,很多又翻译为知名对象。为什么称为知名对象激活模式呢?是因为服务器应用程序在激活对象实例之前会在一个众所周知的统一资源标识符(URI)上来发布这个类型。然后该服务器进程会为此类型配置一个WellKnown对象,并根据指定的端口或地址来发布对象。.NetRemoting把服务器端激活又分为SingleTon模式和SingleCall模式两种。SingleTon模式:此为有状态模式。如果设置为SingleTon激活方式,则Remoting将为所有客户端建立同一个对象实例。当对象处于活动状态时,SingleTon实例会处理所有后来的客户端访问请求,而不管它们是同一个客户端,还是其他客户端。SingleTon实例将在方法调用中一直维持其状态。举例来说,如果一个远程对象有一个累加方法(i=0;++i),被多个客户端(例如两个)调用。如果设置为SingleTon方式,则第一个客户获得值为1,第二个客户获得值为2,因为他们获得的对象实例是相同的。如果熟悉Asp.Net的状态管理,我们可以认为它是一种Application状态。SingleCall模式:SingleCall是一种无状态模式。一旦设置为SingleCall模式,则当客户端调用远程对象的方法时,Remoting会为每一个客户端建立一个远程对象实例,至于对象实例的销毁则是由GC自动管理的。同上一个例子而言,则访问远程对象的两个客户获得的创建时间:2011/11/1修改时间:2011/11/1修改次数:0河北工业大学——软件工程与理论实验室编辑:虾皮4都是1。我们仍然可以借鉴Asp.Net的状态管理,认为它是一种Session状态。(2)客户端激活。与WellKnown模式不同,Remotin