您好, 访客   登录/注册

基于MSMQ技术的移动终端远程通讯方法实现

来源:用户上传      作者: 左传文

  摘要:本文通过对各种通讯方式的比较,总结出MSMQ技术在移动终端的远程通讯中具有优良的传输特性与安全性。
  关键词:MSMQ Mobile 消息 消息队列
  中图分类号: 文献标识码:A文章编号:1007-9416(2010)05-0000-00
  
  0 引言
  随着3G网络技术、市场和政策的不断成熟,移动终端设备的使用量在急速增加,广泛应用各个领域。Windows Mobile是微软为智能移动终端设备使用的操作系统,Windows Mobile将用户熟悉的桌面Windows体验扩展到了移动设备上。通信是移动终端设备之间的桥梁,简单、安全是通信的基础和保障。常用的通信方式有Socket、Web Service、MSMQ:Socket传送数据会自定义传送数据格式并且服务端要使用到多线程接收客户端信息,编程复杂且不好控制;Web Service编程简单易控制,但是只可能调用服务端的函数不能实现服务端和客户端相互通信;MSMQ是微软提供的一种可以远程访问的异步通讯方式,MSMQ是最有保障的数据传方法之一,支持转发,支持延时发送,并且具有较高安全性。
  本文首先总结出MSMQ技术的技术特点与优势,并对各部分功能进行详细介绍,随后提出了消息队列实现基于MSMQ技术的远程通讯方法与实现流程,并对其核心代码进行讲解。最后对该技术应用前景进行展望。
  
  1 MSMQ技术概述
  Message Queue(微软消息队列)是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间中的任一位置。它的实现原理是:消息的发送者把自己想要发送的信息放入一个容器中,然后把它保存至一个系统公用空间的消息队列(Message Queue)中;本地或者是异地的消息接收程序再从该队列中取出发给它的消息进行处理。
  在微软的.net平台上利用其提供的MSMQ功能,可以轻松创建或者删除消息队列、发送或者接收消息、甚至于对消息队列进行管理。
  
  2 MSMQ技术在Mobile中的应用
  (1)引用队列
  在初始化时引用消息队列的代码很简单,如下所示:MessageQueue Mq=new MessageQueue(“.\\private$\\mq”);
  通过Path属性引用消息队列的代码:MessageQueue Mq=new MessageQueue();
  Mq.Path=”.\\private$\\mq”;
  使用 Create 方法可以在计算机上创建队列:
  System.Messaging.MessageQueue.Create(@".\private$\mq");
  (2)发送消息
  队列引用过后,就可以发送消息了。消息的发送可以分为简单消息和复杂消息,简单消息类型就是常用的数据类型,例如整型、字符串等数据;复杂消息的数据类型通常对应于系统中的复杂数据类型,例如结构,对象等等。
  简单消息的发送示例如下:
   Mq.Send(1000); //发送整型数据
   Mq.Send(“This is a test message!”); //发送字符串
  复杂消息的发送和简单消息的发送大同小异,只是发送时,通常不是直接给出发送的消息内容,而是代表发送消息内容的变量。下面的代码分别通过消息变量和复杂数据类型变量发送一条复杂消息。
   下面的代码中发送的消息由消息变量表示
   Message Msg;
   Msg=new Message(“A Complex Message!”);
   Msg.Label=”This is the label”;
   Msg.Priority=MessagePriority.High;
   Mq.Send(Msg);
   下面的代码中发送的消息由复杂数据类型变量表示,Customer为自定义的一个类
   Customer customer = new Customer();
   customer.LastName = "Copernicus";
   customer.FirstName = "Nicolaus";
  Mq.Send(customer);
  (3)接收消息
  接收消息相比发送消息要复杂一点。接收消息由两种方式:通过Receive方法接收消息同时永久性地从队列中删除消息;通过Peek方法从队列中取出消息而不从队列中移除该消息。如果知道消息的标识符(ID),还可以通过ReceiveById方法和PeekById方法完成相应的操作。
   接收消息的代码很简单:
   Mq.Receive(); //或Mq.ReceiveById(ID);
   Mq.Peek();// 或Mq.PeekById(ID);
  (4)阅读消息
  消息的序列化可以通过Visual Studio 和 .NET Framework 附带的三个预定义的格式化程序来完成:XMLMessageFormatter 对象( MessageQueue 组件的默认格式化程序设置)、BinaryMessageFormatter 对象、ActiveXMessageFormatter 对象。由于后两者格式化后的消息通常不能为人阅读,所以我们经常用到的是XMLMessageFormatter对象。
  使用XMLMessageFormatter对象格式化消息的代码如下所示:
   string[] types = { "System.String" };
   ((XmlMessageFormatter)mq.Formatter).TargetTypeNames = types;
   Message m=mq.Receive(new TimeSpan(0,0,3));
  将接收到的消息传送给消息变量以后,通过消息变量m的Body属性就可以读出消息了:
   MessageBox.Show((string)m.Body);
  
  3结语
  本文介绍在Windows Mobile平台上利用MSMQ技术实现远程通讯,以及如何选择和使用这些技术。相信通过本文的论述会对相关工程开发与设计起到很好的指导性作用。
  
  参考文献
  [1] 徐凯声.基于MSMQ的网络通信的研究 武汉交通科技大学学报 2000年24卷6期.


转载注明来源:https://www.xzbu.com/8/view-1064463.htm