MSMQ技术在Windows Mobile系统通信中应用

发布者:心灵之舞最新更新时间:2010-05-18 来源: 电子产品世界关键字:MSMQ  通信  消息  消息队列  PDA  Windows  Mobile 手机看文章 扫描二维码
随时随地手机看文章

      引言

    随着3G网络技术、市场和政策的不断成熟,移动终端设备的使用量在急速增加,广泛应用各个领域。Windows Mobile是微软为智能移动终端设备开发的操作系统,Windows Mobile将用户熟悉的桌面Windows体验扩展到了移动设备上。Windows Mobile为移动终端设备之间的数据交换和信息共享提供了简单、安全的解决方案。在Windows Mobile平台上的数据通信技术有Socket、Web Service、MSMQ(微软消息队列技术)。Socket传送数据会自定义传送数据格式并且服务端要使用到多线程接收客户端信息,编程复杂且不好控制;Web Service编程简单易控制,但是只可能调用服务端的函数不能实现服务端和客户端相互通信;MSMQ是微软提供的一种可以远程访问的异步通讯方式,支持转发,支持延时发送,并且具有较高安全性,是当前Windows Mobile平台上最可靠的数据通信方法。

    MSMQ技术

    Message Queue(微软消息队列)是在多个不同应用程序(终端或服务)之间实现相互通信的一种异步传输模式,相互通信的应用程序可以分布于同一台机器上,也可以分布于相连的网络空间中的任一终端。消息是通信的双方所需要传递的信息,它可以是各种对象,如文本、声音和图像等。消息最终的实现方式是由消息传递的双方共同制定的协议来规定,这样做的好处,既对数据进行了简单的加密,也可以减轻系统通信的负担。其实现原理是消息的发送者把自己想要发送的信息放入一个容器中(Message),然后将其保存到一个系统公用空间的消息队列中;本地或者是异地的消息接收程序再从该队列中取出发给它的消息进行处理。

    由于采用的是异步通信方式,无论是发送程序还是接收程序都不用等待对方返回成功发送消息的标志,就可以执行余下的代码,因而提高了系统的处理能力。当信息传送过程中,信息发送机制具有故障恢复能力;MSMQ的消息传递机制使得消息通信的双方具有通过不同的物理平台进行通信的能力。在支持.net技术的操作系统上利用其提供的MSMQ功能,可以轻松创建或者删除消息队列,发送或者接收消息,并具有对消息队列进行管理。消息队列是发送和接收消息的公用存储空间,它可以存在于内存中或者是物理文件中。

    系统结构与软件配置

    系统结构

    针对客车业生产现场数据采集系统实例,由于客车生产属于混合流水生产行业,工序和工艺路线复杂、人工参与生产多、客车比其他产品体积庞大,所以需要现场人员使用PDA扫描生产现场数据和上报生产进度状况。车间和厂区范围大,车间环境复杂,整个网络采用无线通信的方式。PDA中装有Windows Mobile系统,在PDA中可以安装各种应用程序,例如条码扫描、车间物料供需程序和生产现场调度程序。在PDA上也可以扩展外部设备,例如条码扫描枪和微型打印机等。利用PDA的移动性和比较强的数据处理能力可对现场数据进行实时的采集和整理。将采集的现场数据上传到数据采集服务器、生产追踪服务器和生产调度服务器。

    如图1所示的系统硬件平台主要由厂级数据中心的服务器、无线路由器和PDA数据采集器构成,车间中根据生产工艺工序配置的多个PDA数据采集器,PDA上的扫描枪可以实时的采集现场数据,PDA的上的处理程序将采集的数据进行处理,然后通过多层无线路由器AP上传到厂级数据中心服务器,每个PDA都有自己独立的IP地址,服务器通过收发消息对上传的数据进行管理和向PDA发出指令。整个系统包括服务器程序和客户端程序,通过MSMQ技术实现PDA与数据服务器的数据通信。

            [page]

       系统软件配置

    服务端配置:服务端是Windows Server2003操作系统,服务器程序检查客户端在线状态,将在线客户端信息(包括:客户端名称、客户段IP地址)共享给每个客户端。

    客户端:需要设置服务器端IP地址,本地客户端名称。设置正确服务端IP地址、本地客户端名称后。通过服务端获取在线客户端信息,指定客户端后可以接收新消息和发送消息。

    MSMQ技术在Windows Mobile中的应用

    在PDA上Windows Mobile操作系统中通过MSMQ技术实现数据通信,要使用MSMQ开发消息处理程序,必须在服务器主机和客户端上安装消息队列。消息处理程序主要是消息的发送和接收,如果要实现收发消息,必须引用一个队列,引用的消息队列分为公用队列和专用队列,这两个队列都存放用户设计的消息。引用消息队列后,就可以发送、接收和阅读消息了。消息接收服务位于System.Messaging中,需要在工程中引用System.Messaging.dll文件。具体实现过程和代码如下:

    引用队列

    通过路径、格式名和标签三种方法引用队列。例如:通过路径引用消息队列,路径的形式为 machinename\\queuename。在实际应用中,指向队列的路径必须是唯一的。表1列出用于每种类型的队列的路径信息。

                             

      如果是发送到本机上,还可以使用“.”代表本机名称。具体的引用方法可以在初始化消息队列时设置,也可以通过设置消息队列的Path属性来实现。如果在初始化时引用消息队列,那么消息队列必须存在于系统中,否则会产生错误。在程序中可以实现消息队列的创建。

    在初始化时引用消息队列的代码如下:

    MessageQueue Mq=new MessageQueue(“.\\\\private$\\\\mq”);

    通过Path属性引用消息队列的代码:

    MessageQueue Mq=new

    MessageQueue();

    Mq.Path=”.\\\\private$\\\\mq”;

    如果消息队列不存在,可以使用 Create方法可在计算机上创建队列,实现代码如下:

    System.Messaging.MessageQueue.

    Create(@".\\private$\\mq");[page]

     发送消息

    应用程序引用消息队列后,就可以进行发送和接收消息操作。发送的消息可以分为简单消息和复杂消息,简单消息类型就是常用的数据类型,例如整型、字符串等数据;复杂消息的数据类型通常对应于系统中的复杂数据类型,例如结构体和类对象等。

    简单消息的发送示例如下:

    Mq.Send(1000); //发送整型数据

    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);[page]

        接收消息

    接收消息相比发送消息要复杂一些。接收消息有两种方式:通过Receive方法接收消息同时永久性地从队列中删除消息;通过Peek方法从队列中取出消息而不从队列中移除该消息。如果知道消息的标识符(ID),还可以通过ReceiveById方法和PeekById方法完成相应的接收消息操作。

    接收消息的代码如下:

    Mq.Receive(); //或

    Mq.ReceiveById(ID);

    Mq.Peek(); // 或

    Mq.PeekById(ID);

    阅读消息

    只有通过根据通信双方的约定将接收到的消息中信息提取出来,传递的消息才有价值,因此接收到消息以后还必须能读出消息中包含的信息。在发送端的应用程序发送的消息和消息队列中的传输消息的格式不同,因而发送端的应用程序发送出去的消息经过序列化以后才发送给了消息队列,这一过程由系统自动完成了,程序开发人员不必为此编写代码,然而在接收到消息后就需要对接收的消息进行反序列化。

    消息的反序列化可以通过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);

    关闭消息队列

    关闭消息队列可以通过Close函数来实现,代码如下:

    Mq.Close();

    结语

    基于Windows Mobile平台的高速无线网络为各行业客户提供更加可靠便捷的移动解决方案。消息队列技术保证移动设备与数据中心之间进行良好的通信。通过对Windows Mobile平台上,发送、接收和阅读消息工作过程的讲解说明消息队列技术简单实用。基于MSMQ技术的Windows Mobile平台通信系统已经在国内某大型客车企业生产追踪系统中得到应用。[page]

      参考文献:

    [1] 徐凯声. 基于MSMQ的网络通信的研究[J]. 武汉交通科技大学学报,2000, 24(6)

    [2] 李晓剑, 刘洪星. 消息队列中间件技术MSMQ的应用研究[J].交通与计算机, 2001, 19(21)

    [3] 高勇, 吴健. 基于MSMQ的分布式应用架构[J].计算机应用研究, 2004,21(10)

    [4] 朱晓东, 耿国华. MTS和MSMQ技术及其应用[J].西北大学学报, 2002,32(10)

    [5] 汤丹, 胡志刚, 匡晓红. 基于消息队列的工作流引擎及其容错设计[J].计算机工程, 2008,34(19)

 

 

 

 

 

 

关键字:MSMQ  通信  消息  消息队列  PDA  Windows  Mobile 引用地址:MSMQ技术在Windows Mobile系统通信中应用

上一篇:如何提高TD-SCDMA网络容量及质量
下一篇:太阳能无线信号系统设计方案

推荐阅读最新更新时间:2024-05-07 16:04

中国通信网评论:核心不是问题 关键在于体验
目前用户感受最为直接的人机界面切换的流畅度以及触摸控制的爽滑度等问题,其直接的决定力量也并非硬件的性能指标而是软件系统的优化程度。 周一开幕的2012年世界移动通信大会(以下简称MWC)比年初的CES显然更加激动人心,一大堆重量级的移动互联终端粉墨登场。尤其是把控目前智能手机、平板电脑上游芯片领域的德州仪器、高通和三星等集体发力,再加上新贵华为的强力奉献,一场有关移动互联终端的多核大战正式引爆。就目前各大芯片巨头联手推出的产品状况来看,2012年双核将会成为智能手机、平板电脑的主流配置,而四核将会占据旗舰地位,而且根据企业的计划,相关产品将会从今年二季度陆续上市,到年底完成市场主流的基本切换。对此,部分3C技术发烧友当然满心期待
[手机便携]
基于VB6.0的MSP430单片机与PC机串口通信设计
1 引言 随着计算机技术的不断发展,计算机应用在其发展过程中逐步形成两大分支,一是通用计算机,PC机为代表,着眼于高速数值运算和数据处理,但实时测控能力较弱。二是嵌入式微机,以单片机为代表,着重发展测控技术,但其数值运算和数据处理能力较弱。目前,在工业控制以及数据采集和数据处理的大型系统中,由于PC 机软件资源丰富,人机交互方便等优点。以PC机作为上位机,以单片机组成的控制单元作为下位机,较好地实现测控及显示,又能较快地实现数据采集和处理。逐渐成为现代工业控制领域的一个优化方案。 故提出了基于VB6.0 的PC 机与MSP430单片机串行通信的实现方法。以RS485 接口为基础,以PC机为上位机,以MSP430 系列单片机
[单片机]
基于VB6.0的MSP430单片机与PC机串口<font color='red'>通信</font>设计
网传兰奇离职去华为,联想:虚假消息
有媒体称联想集团总裁兼首席运营官蒋凡可·兰奇先生将离职加入华为。对此,联想声明表示此消息为虚假消息。有媒体称兰奇离开联想加入华为后掌控华为欧洲市场。在此消息不久前华为在德国发布了发布了三款笔记本电脑:15.6英寸屏幕的Matebook D、二合一的Matebook E以及金属机身超薄MateBook X。 不过对于离职去华为的消息,联想表示此新闻是虚假信息,特予以澄清。 联想表示兰奇于2011年加入联想,先后出任联想集团高级副总裁 兼EMEA区总裁,以及联想集团全球总裁兼首席运营官。兰奇对于联想集团在全球市场的拓展和国际化做出了重大的贡献,将继续带领联想全球团队进军新PC和下一代智能设备市场,将联想打造为智能互联网时代的全
[手机便携]
I2C总线通信接口的CPLD实现
    摘要: 介绍采用ALTERA公司的可编程器件,实现I2C总线的通信接口的基本原理;给出部分VHDL语言描述。该通信接口号专用的接口芯片相比,具有使用灵活,系统配置方便的特点。     关键词: I2C总线 CPLD VHDL I2C总线是PHILIPS公司开发的一种简单、双向二线制同步串行总线。它只需要两根线(串行时钟线和串行数据线)即可在连接于总线上的器件之间传送信息。该总线是具备多主机系统所需要的包括裁决和高低速设备同步等功能的高性能串行总线,应用极为广泛。 目前,虽然市场上有专用I2C总线接口芯片,但是地址可选范围小,性能指标固定,功能单一,而且使用不方便。针对I2C总线的电气特性及其通信协
[工业控制]
远距离多机分时双工通信芯片SR331
    摘要: SR331是新乡三瑞电子技术有限公司精心研制的分时双工通信模块。它利用20mA电流环和光电隔离原理来实现上位机与多个下位机间的多机分时双工通信。因而具有极高的可靠性下位机无数量限制的优点,从而解决了远距离多机通信时RS485芯片容易损坏的问题。     关键词: 多机通信 电流环 SR331 1 前言 在许多巡检系统工程应用中,往往需要计算机与多个单片机实现远距离多机双向通信。在计算机为上位机,单片机是下位机的情况下,目前通用的方法是采用RS-485协议,要求芯片通常都具有抗静电干扰、节点多、通信速率高等优点。然而,在笔者设计的几个系统中所使用的多种类型的RS-485、RS-422协议的芯片
[应用]
来自供应链消息:诺基亚2/7/9将于2018年初发布
最近有消息称HMD将继续推出一系列诺基亚手机,涵盖了入门和高端机型,但具体发布时间还有待确认。   此前有消息称诺基亚2和9将是HMD即将推出的新款手机,但可能还会有一款中端机,名为诺基亚7。不过,新的报道称,我们可能必须要等到明年才能见到这些新的诺基亚智能手机,消息来自于HMD处理诺基亚物流的供应链管理人员。   据爆料人称,诺基亚2,7和9是HMD第二批Android智能手机的一部分,它们将于2018年初发布。值得一提的是,这些爆料是在Facebook上发布的,所以这个人似乎并不害怕自己的身份曝光而惹麻烦,因此这些消息的真实性还有待证实。
[手机便携]
难以抗拒的极具成本效益的车载计算机VMC 1000
新汉7"all-in-one(AIO) 车载计算机 VMC 1000提供极具竞争力的高性价比满足用户的需求。VMC 1000采用紧凑型机箱设计,高抗振性,同时符合IP54标准的外观和智能电源管理系统,是车载计算应用的理想解决方案。VMC 1000可提供一流的通信连接,在室外或移动环境下保持性能稳定,因此可在车辆跟踪,车队管理,以及车队运输的远程信息处理应用中提供完美的解决方案。 VMC 1000集成远程信息处理计算机和7"液晶触摸屏,提供AIO解决方案,专为车辆运行设计。结构尺寸为185.4mm W * 50.42mm H * 141.4 mm D,可安装在极具空间受限的环境,包括重型越野设备中。
[汽车电子]
难以抗拒的极具成本效益的车载计算机VMC 1000
智能汽车通信架构概述
通信架构产业链 1. 通信架构产业链综述 早期汽车采用点对点的单一通信方式,相互之间少有联系。每一路信号传递都需要一根电缆连接交换数据,导致每一个ECU 都需要N 个接口,有些ECU 的接口数会是十几个甚至三十几个,形成庞大的布线系统。这引发了车辆空间占用、车重、成本、系统复杂度以及不稳定性等一系列问题。以CAN 为代表的现代总线出现以后,硬线连接大大减少,有效降低了系统、零部件设计的复杂度和开发成本,驱使整车企业与零部件供应商之间形成标准化协议。总线作为一种车辆网络拓扑结构,是车上所有电子和电气部件互联结构的线束表现,直接影响到控制器功能的分配、数据网络的规划,犹如汽车的神经。 目前汽车上普遍采用的汽车总线主要有控制
[汽车电子]
小广播
最新网络通信文章
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved