应用Remoting技术的分布式处理程序

 基础知识:        在Remoting中是通过通道(channel)来实现两个应用程序域之间通信的

       Remoting的通道有两种:TCP和HTTP,TCP通道提供了基于Socket的传输工具,使用Tcp协议来跨越Remoting边界传输序列化的消息流,TcpChannel使用二进制格式序列化消息对象。HttpChannel使用Soap格式来序列化消息对象,HttpChannel用Http协议使消息能在Internet上穿越防火墙传输序列化的消息流。       远程对象的激活方式:服务器端激活和客户端激活

服务器端激活又叫WellKnow,知名对象激活方式。      

Remoting把服务器端激活又分为SingleTon模式和SingleCall模式两种      

SingleTon模式:有状态模式,Remoting将为所有客户端建立同一个对象实例。       

SingleCall模式:当客户端调用远程对象的方法使,Remoting为每一个客户端建立一个远程对象实例         

客户端激活       

Remoting在激活每一个对象的实例时,会给每个客户端激活的类型指派一个URI,来获取信道中的远程对象        

 在Remoting分布式程序中,通常包括三部分,远程对象、服务端、客户端,由于Remoting传输对象是序列化的引用方式,所以远程对象类必须要继承MarshalByRefObject类。        

发起者和订阅者:消息由发起者发送,订阅者收到该消息后,激发事件。

 2.程序结构与说明

1).总体思路客户端激活远程对象,然后用此远程对象订阅远程类的事件,当服务器调用远程类的方法发送消息后,客户端激活事件接收消息。

2)Common程序集该程序集属于公用的,定义了委托BroadCastEventHandler和接口IBroadCast。既要在服务器端部署,也要在客户端部署。客户端用GetObject()方法来激活远程对象,客户端获得IBradCast接口类型的远程对象代理

  3)类EventWrapper         此类的实现方式完全和远程类的实现方式一样。在客户端注册事件后,用此类的委托来订阅远程事件,并激发此事件来接收消息

  4)远程类BroadCastObj        为了序列化传输对象,此类继承了类MarshalByRefObject和实现了接口IBroadCast       通过实现委托来定义事件,发送消息。      考虑到服务器在发送消息时,对客户端发生的意外情况浑然不知,所以在发送消息的方法中使用了委托链,在委托链的遍历中来捕获异常。当某一客户端的委托发生异常时,在服务器端给出提示信息,并取消该委托,然后继续遍历其他客户端的委托。这样即能处理客户端的异常,又能保证其他正常的客户端的消息接收。
 
5)Server程序集         当服务器启动时,建立Tcp信道,指定信道所用的协议,端口号和传输方式,并注册这个信道。建立远程对象的实例,并把此实例Marshal到信道中,并指明此对象在信道中的名称。然后调用注册的远程对象的方法来发送消息。在远程类的方法中,用公用类EventWrapper的事件来发送消息,而此事件也在客户端订阅了,所以服务器端发送的消息客户端能接收到。
6)Client程序集         建立和服务器端类型相同的信道,         用GetObject方法激活远程对象的代理对象,指定远程对象类型,使用的传输协议,服务器名称或IP,服务器的端口,及远程对象在信道中的名称。 watch = (IBroadCast)Activator.GetObject( typeof(IBroadCast), "tcp://chenhongming:6791/CallbackSample");         建立远程类中事件的实例,并且用此实例订阅本地方法         然后用远程对象来订阅远程事件,此事件触发已订阅了本地方法的事件,代码示例如图所示:
 
  本地方法:是把所接收到的消息显示在文本框中。由于调用本地方法不是主线程调用的,所以又要建立一个委托,通过这个委托注册本地方法,然后在主线程中调用委托来接收消息并显示出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值