<var id="fnfpo"><source id="fnfpo"></source></var>
<rp id="fnfpo"></rp>

<em id="fnfpo"><object id="fnfpo"><input id="fnfpo"></input></object></em>
<em id="fnfpo"><acronym id="fnfpo"></acronym></em>
  • <th id="fnfpo"><track id="fnfpo"></track></th>
  • <progress id="fnfpo"><track id="fnfpo"></track></progress>
  • <tbody id="fnfpo"><pre id="fnfpo"></pre></tbody>

  • x
    x

    MSMQ技術在Windows Mobile系統通信中應用

    發布時間:2010-4-15 13:34    發布者:賈延安
    關鍵詞: Mobile , MSMQ , Windows , 系統 , 應用
    引言

    隨著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與數據服務器的數據通信。



    系統軟件配置

    服務端配置:服務端是Windows Server2003操作系統,服務器程序檢查客戶端在線狀態,將在線客戶端信息(包括:客戶端名稱、客戶段IP地址)共享給每個客戶端。

    客戶端:需要設置服務器端IP地址,本地客戶端名稱。設置正確服務端IP地址、本地客戶端名稱后。通過服務端獲取在線客戶端信息,指定客戶端后可以接收新消息和發送消息。

    MSMQ技術在Windows Mobile中的應用

    在PDA上Windows Mobile操作系統中通過MSMQ技術實現數據通信,要使用MSMQ開發消息處理程序,必須在服務器主機和客戶端上安裝消息隊列。消息處理程序主要是消息的發送和接收,如果要實現收發消息,必須引用一個隊列,引用的消息隊列分為公用隊列和專用隊列,這兩個隊列都存放用戶設計的消息。引用消息隊列后,就可以發送、接收和閱讀消息了。消息接收服務位于System.Messaging中,需要在工程中引用System.Messaging.dll文件。具體實現過程和代碼如下:

    引用隊列

    通過路徑、格式名和標簽三種方法引用隊列。例如:通過路徑引用消息隊列,路徑的形式為 machinenamequeuename。在實際應用中,指向隊列的路徑必須是唯一的。表1列出用于每種類型的隊列的路徑信息。



    如果是發送到本機上,還可以使用“.”代表本機名稱。具體的引用方法可以在初始化消息隊列時設置,也可以通過設置消息隊列的Path屬性來實現。如果在初始化時引用消息隊列,那么消息隊列必須存在于系統中,否則會產生錯誤。在程序中可以實現消息隊列的創建。

    在初始化時引用消息隊列的代碼如下:

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

    通過Path屬性引用消息隊列的代碼:

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

    如果消息隊列不存在,可以使用 Create方法可在計算機上創建隊列,實現代碼如下:

      System.Messaging.MessageQueue.
      Create(@".private$mq");

    發送消息

    應用程序引用消息隊列后,就可以進行發送和接收消息操作。發送的消息可以分為簡單消息和復雜消息,簡單消息類型就是常用的數據類型,例如整型、字符串等數據;復雜消息的數據類型通常對應于系統中的復雜數據類型,例如結構體和類對象等。

    簡單消息的發送示例如下:

      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);

    接收消息

    接收消息相比發送消息要復雜一些。接收消息有兩種方式:通過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平臺上,發送、接收和閱讀消息工作過程的講解說明消息隊列技術簡單實用;贛SMQ技術的Windows Mobile平臺通信系統已經在國內某大型客車企業生產追蹤系統中得到應用。

    參考文獻:

      [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)

    作者:尚爾明 沈陽市電信規劃設計院 王長濤 沈陽建筑大學信息與控制工程學院 于天明 沈陽市華域建筑設計有限公司   
    來源:電子產品世界 2010-03-09
    本文地址:http://www.portaltwn.com/thread-10480-1-1.html     【打印本頁】

    本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
    您需要登錄后才可以發表評論 登錄 | 立即注冊

    廠商推薦

    • Microchip視頻專區
    • EtherCAT®和Microchip LAN925x從站控制器介紹培訓教程
    • MPLAB®模擬設計器——在線電源解決方案,加速設計
    • 讓您的模擬設計靈感,化為觸手可及的現實
    • 深度體驗Microchip自動輔助駕駛應用方案——2025巡展開啟報名!
    • 貿澤電子(Mouser)專區

    相關在線工具

    相關視頻

    關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
    電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
    快速回復 返回頂部 返回列表
    精品一区二区三区自拍图片区_国产成人亚洲精品_亚洲Va欧美va国产综合888_久久亚洲国产精品五月天婷