- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Microsoft .Net Remoting 系列专题之三: Remoting 事件处理全接触
我写的 .Net Remoting 系列专题:
Microsoft .Net Rem oting 系列专题之一 :.Net Remoting 基础篇
Microsoft .Net Rem oting 系列专题之二: Marshal 、 Disconnect 与生命周期以及跟踪服务
前言:在 Remoting 中处理事件其实并不复杂,但其中有些技巧需要你去挖掘出来。正是这些
技巧,仿佛森严的壁垒,让许多人望而生畏,或者是不知所谓,最后放弃了事件在 Remoting
的使用。关于这个主题,在网上也有很多讨论,相关的技术文章也不少,遗憾的是,很多文章概
述的都不太全面。我在研究 Remoting 的时候,也对事件处理发生了兴趣。经过参考相关的书
籍、文档,并经过反复的试验,深信自己能够把这个问题阐述清楚了。
本文对于 Remoting 和事件的基础知识不再介绍,有兴趣的可以看我的系列文章,或查阅相关
的技术文档。
本文示例代码下载:
Remoting 事件 ( 客户端发传真 )
Remoting 事件 ( 服务端广播 )
Remoting 事件 ( 服务端广播改进 )
应用 Remoting 技术的分布式处理程序,通常包括三部分:远程对象、服务端、客户端。因此
从事件的方向上看,就应该有三种形式:
1 、服务端订阅客户端事件
2 、客户端订阅服务端事件
3 、客户端订阅客户端事件
服务端订阅客户端事件,即由客户端发送消息, 服务端捕捉该消息,然后响应该事件, 相当于下
级向上级发传真。反过来,客户端订阅服务端事件,则是由服务端发送消息,此时,所有客户端
均捕获该消息,激发事件, 相当于是一个系统广播。 而客户端订阅客户端事件呢?就类似于聊天
了。由某个客户端发出消息,其他客户端捕获该消息,激发事件。可惜的是,我并没有找到私聊
的解决办法。当客户端发出消息后,只要订阅了该事件的,都会获得该信息。
然而不管是哪一种方式,究其实质,真正包含事件的还是远程对象。原理很简单,我们想一想,
在 Remoting 中,客户端和服务端传递的内容是什么呢?毋庸置疑,是远程对象。因此,我们
传递的事件消息,自然是被远程对象所包裹。这就像 EMS 快递,远程对象是运送信件 的汽车 ,
而事件消息就是汽车所装载的信件。 至于事件传递的方向, 只是发送者和订阅者的角色发生了改
变而已。
一、 服务端订阅客户端事件
服务端订阅客户端事件,相对比较简单。 我们就以发传真为例。 首先,我们必须具备传真机和要
传真的文件,这就好比我们的远程对象。 而且这个传真机上必须具备 “发送 ”的操作按钮。 这就好
比是远程对象中的一个委托。当客户发送传真时,就需要在客户端上激活一个发送消息的方法,
这就好比我们按了 “发送 ”按钮。消息发送到服务端后,触发事件,这个事件正是服务端订阅的。
服务端获得该事件消息后, 再处理相关业务。 这就好比接收传真的人员,当传真收到后, 会听到
接通的声音,此时选择 “接收 ”后,该消息就被捕获了。
现在,我们就来模拟这个流程。 首先定义远程对象, 这个对象处理的应该是一个发送传真的业务:
首先是远程对象的公共接口( Common.dll ):
public delegate void FaxEventHandler(string fax);
public interface IFaxBusiness
{
void SendFax(string fax);
}
注意,在公共接口程序集中,定义了一个公共委托。
然后我们定义具
文档评论(0)