基于.Net的消息通讯技术研究

来源 :中国科技博览 | 被引量 : 0次 | 上传用户:taobixianshi
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  [摘 要]按照发送者和接受者所处的位置关系,基于Windows系统的消息通讯可以分为进程内通讯和进程间通讯。进程内通讯采用发布/订阅方式进行通讯是比较合理的一种通讯方式,进程间通讯可以采用多种方式,优选了简单易用并且实用的系统消息WM_COPYDATA方式,将两种通讯方式在.NET平台下进行集成和封装,以公用组件的方式应用于系统之中,既满足了系统的消息通讯,而且做到了模块之间的独立和通讯的独立。
  [关键词].NET 消息 通讯 进程
  中图分类号:TG333.7 文献标识码:A 文章编号:1009-914X(2013)08-141-01
  1 引言
  进程内通讯在类似VS2010这样的开发工具中都进行了集成,而使用方式也有点对点、订阅/发布等多种方式;进程间通讯在Windows系统中也有文件映射(Memory-Mapping Fields)、内存共享(Shared Memory)、匿名管道(Anonymous Pipe)、命名管道(Named Pipe)、邮件槽(Mailslots)、剪切板(Clipped Board)、动态数据交换(DDE)、动态链接库(DLL)、远程过程调用(RPC)、NetBois函数、Windows Sockets、WM_COPYDATA消息、消息列队等方式,每种方式有其优势和特点。
  在一个系统中,既要用到进程内的通讯,又要用到进程间的通讯,而且想把系统中所有的消息通讯进行一个封装,所有除了主程序之外的所有模块(另起进程)通过DLL引用既能与其他的模块进行消息传递和消息处理。因此,需要选择一个合适的消息通讯方案。
  2 方案设计
  通过对目前的进程内和进程间通讯技术的研究,设计了订阅/发布式的进程内通讯方式,同时考虑到系统不存在不同主机、不同操作系统之间的进程间通讯,采用了简单实用的窗口消息方式进行通讯,使用Windows的WM_COPYDATA消息来进行消息传递。并且将两种通讯方式进行了封装,以类库的方式提供给系统中所有的模块使用。
  3 系统实现
  3.1 进程内通讯
  3.1.1 消息的发送
  通过引用消息通讯类并实例化其中的GeneralECFClient类,注册到消息池,将需要发送的数据封装到ECFMessage类中进行整体的发送,通过GeneralECFClient类中的发布方法PublishMessage将该消息进行发布。
  进程内通讯可分4步完成:(1)EventCommunication组件的引用;(2)GeneralECFClient类型的定义;(3)GeneralECFClient实例化及注册;(4)消息的发送:ECFMessage msg = new ECFMessage();msg.parameter = new SerializableDictionary();msg.command="EA_ZHLJTShow";msg.parameter.Add("Name",this.textBox2.Text);ECFClient.PublishMessage("EISEEECFCommonClient",msg);
  3.1.2消息的接受
  进程内通讯的接收端同样引用EventCommunication并实例化和注册GeneralECFClient类,并对其添加对事件OnECFMessage的相应,该相应即是事件在接收到相应的消息以后的处理过程,程序在使用过程中可以将所有的的消息处理放到代理方法中,并做统一的区分和处理。
  进程内通讯可分6步完成:(1)EventCommunication组件的引用;(2)GeneralECFClient类型的定义;(3)GeneralECFClient实例化及注册;(4)为了允许跨线程访问用户控件,定义代理private delegate void InvokeCallback(ECFMessage msg);(5)消息的接受及处理,ECFClient.OnECFMessage += new OnECFMessageHandler(ExcetuECFMessage);(6)消息的处理在方法ExcetuECFMessage中进行,其中ExcetuECFMessage中的内容为:
  if(this != null && !this.IsDisposed)
  { if(this.InvokeRequired)
  { InvokeCallback msgCallback = new InvokeCallback(ExcetuECFMessage);
  this.BeginInvoke(msgCallback,new object[] { message });
  return;} }
  //消息的处理内容
  ……
  3.2 进程间通讯
  3.2.1 消息的发送
  进程间的消息发送也是通过GeneralECFClient类完成,基本用法与进程内通讯一致,不同之处在于,消息的发布通过广播的方式完成,通过BroadcastMessageExcept方法将携带数据的消息发送到所有Windows窗口句柄,在接收端通过判断消息来源的标示ID判断是否需要自己的相应。
  进程内通讯可分4步完成:(1)EventCommunication组件的引用;(2)GeneralECFClient类型的定义;(3)GeneralECFClient实例化及注册:ECFClient2 = new GeneralECFClient("Form1",EnumCommunicationType.Win32CopyData,this.Handle.ToString());ECFClient2.Register(),此处使用Win32CopyData类型数据;(4)消息的发送:ECFMessage msg = new ECFMessage();msg.parameter = new SerializableDictionary();msg.command = "EA_ZHLJTShow";msg.parameter.Add("Name",this.textBox2.Text);ECFClient2.BroadcastMessageExcept("Form1",msg);此處使用了BroadcastMessageExcept方法作为消息的广播。
  3.2.2消息的接受
  进程间的消息接收通过订阅GeneralECFClient类和重写系统的DefWndProc方法来接收和处理消息。
  进程内通讯可分5步完成:(1)EventCommunication组件的引用;(2)GeneralECFClient类型的定义;(3)GeneralECFClient实例化及注册;(4)为了允许跨线程访问用户控件,定义代理private delegate void InvokeCallback(ECFMessage msg);(5)消息的接受及处理实际上是重写DefWndProc 的过程,protected override void DefWndProc(ref System.Windows.Forms.Message m)}。
  4 结论
  通过研究基于.Net的各类进程间及进程内通讯技术的研究,并且考虑进程间通讯的实际用处,采用了综合事件订阅/发布的进程内通讯方案和基于窗口方式的进程间通讯方式,并且将两者进行结合和封装,以DLL方式提供公用组件给系统中的所有模块使用。达到了多方面的效果:第一,模块之间进行了有效的解耦,依赖性大幅度降低。第二,提供了统一标准和统一使用方法的通讯机制,每个模块的通讯,无论是进程间和进程内,只需要实例化通讯接口对外提供的接口即可。
  参考文献:
  [1] Richter,J.周靖,张杰良. 框架设计:CLR Via C#[M]. 清华大学出版社. 2006
  [2] Eric Freeman,Elisabeth Freeman,Kathy Sierra,Bert Bates.Head First设计模式C#版[M].中国电力出版社.2007
  [3] 王翔.孙逊.模式--工程化实现及扩展[M]. 电子工业出版社. 2012
其他文献
中图分类号:F323.3 文献标识码:A 文章编号:1009-914X(2013)08-119-01  设施农业是农业现代化的重要标志,具有主动规避自然灾害、吸纳农村富裕劳动力、拓展农业发展空间的功能,是农业生产由广种薄收、粗放经营向集约化经营生产方式转变和促进产业结构调整、农业增效、农民增收的重要途径。近年来,我市高度重视设施农业发展,以培育优势、特色农业为目标,充分发挥各地资源优势,扩大设施规
期刊
[摘 要]本文根据工作实际,介绍了黑龙煤业有限公司主斜井井底煤仓采用反井钻机导孔、爆破刷大等方法,保证了煤仓安全施工,且取得了较好的经济效果,以供同行交流与参考。  [关键词]井底煤仓 反井钻机法 施工方法  中图分类号:TD 文献标识码:A 文章编号:1009-914X(2013)08-134-01  1、前言  煤仓是煤矿井下煤流系统中的关键性工程,煤仓施工条件往往比较差,尤其是大断面煤仓的施
期刊
[摘 要]船舶机械设备的维修保养和修理,例如技术保养、拆换耗损的零部件、调整和检查设备的状态等,在规定的时间内,通过维修使之保持和恢复到正常使用条件下的功能,使其能适应于日常的安全运转,提高生产水平,本文对船舶机械维修各个方面做了相关的调研,对日常船舶的维护具有重要的指导意义。  [关键词]船舶 机械 维修  中图分类号:TD353.5 文献标识码:A 文章编号:1009-914X(2013)08
期刊
[摘 要]医院档案管理对医院发展、医学研究乃至医疗领域有着极其重要的作用,是现代医学进步和发展的关键因素。本文就医院档案管理的诸多问题做出了相应的分析,可供医学研究者和医院管理者参考。  [关键词]档案管理 科学化 医院档案  中图分类号:TD327.3 文献标识码:A 文章编号:1009-914X(2013)08-129-01  引言  随着时代的发展,医院的建设和发展正处在一个非常时期,医院档
期刊
[摘 要]新时期下建设工程造价的管理应是全过程、全方位的管理。本文就建设工程中不同的主体(建设单位、设计单位、施工单位、咨询单位及工程造价管理部门)进行探讨。  [关键词]新时期 建设工程造价 全方位 控制  中图分类号:TU723.3 文献标识码:A 文章编号:1009-914X(2013)08-117-01  一、建设单位的工程造价管理  建设单位是项目的投资主体,是项目决策者、组织者和责任者
期刊
[摘 要]进入21世纪,信息技术在迅猛发展,电子信息化大潮席卷全球,计算机网络已延伸到社会的每一个角落,把社会推向信息化、网络化的时时代。就产生了大量的电千文件如何如何做好电子文件的归档管理,这是新时代向档案工作者提出的严峻挑战。  [关键词]电子文件 归挡 分类 途径  中图分类号:[N99] 文献标识码:A 文章编号:1009-914X(2013)08-124-01  在当今社会,电子文件的出
期刊
[摘 要]随着油田开发时间的延长,抽油机井含水和产液量增加,导致用电成本成本的逐年增加,结合生产实际降低油井运行电费成为基层采油队降本增效的主要手段,笔者结合基层工作经验,全面分析有杆抽油井的耗电因素,制定合理的节电降耗措施,取得良好的经济和社会效益。  [关键词]有杆抽油机井 降耗措施 效果  中图分类号:TG333. 文献标识码:A 文章编号:1009-914X(2013)08-034-01 
期刊
[摘 要]随着测绘技术的现代化,地质测绘的技术方法和技术手段也将逐步更新换代。本文对新时期现代地质测绘技术进行了分析探讨。  [关键词]测绘技术 地质 GPS  中图分类号:R714.4 文献标识码:A 文章编号:1009-914X(2013)08-136-01  地质测绘长期依靠经纬仪、平板仪、水准仪“老三仪”进行工作,新技术的应用较局限。在未来的发展中,随着现代测绘技术的逐步扩大应用,向“老三
期刊
中图分类号:TD327.3 文献标识码:A 文章编号:1009-914X(2013)08-111-01  前言  随着物探公司海外项目的逐渐发展,所涉及到的国家和区域越来越广泛,伊朗、吉尔吉斯坦、哈萨克斯坦、蒙古、沙特等遥远的国度都留下了胜利物探的足迹。每次在完全陌生的环境,都会面对各种复杂的社会关系、遇到浓厚的政治色彩等;原来的管理模式、处事方式可能都不适应新的人文环境,在项目之初都会面临着各种
期刊
[摘 要]当前,化工企业规模及自动化技术水平阶跃性提升,自动化仪表工作面临人员少、工作量大、技术含量倍增的三重压力。本文主要针对如何提高化工仪表自动化管理水平进行详细探讨  [关键词]化工仪表 自动化管理水平  中图分类号:TU855 文献标识码:A 文章编号:1009-914X(2013)08-132-01  一、化工仪表及自动化系统的分类  化工仪表及自动化系统按功能不同,分四类:检测仪表(包
期刊