<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 手機(jī)與無線通信 > 設(shè)計應(yīng)用 > 基于Windows Mobile平臺的高速無線網(wǎng)絡(luò)的移動解決方案

          基于Windows Mobile平臺的高速無線網(wǎng)絡(luò)的移動解決方案

          作者: 時間:2011-12-26 來源:網(wǎng)絡(luò) 收藏

          本文引用地址:http://www.ex-cimer.com/article/155397.htm

           如果是發(fā)送到本機(jī)上,還可以使用“.”代表本機(jī)名稱。具體的引用方法可以在初始化消息隊(duì)列時設(shè)置,也可以通過設(shè)置消息隊(duì)列的Path屬性來實(shí)現(xiàn)。如果在初始化時引用消息隊(duì)列,那么消息隊(duì)列必須存在于系統(tǒng)中,否則會產(chǎn)生錯誤。在程序中可以實(shí)現(xiàn)消息隊(duì)列的創(chuàng)建。

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

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

            通過Path屬性引用消息隊(duì)列的代碼:

            MessageQueue Mq=new

            MessageQueue();

            Mq.Path=”.private$mq”;

            如果消息隊(duì)列不存在,可以使用 Create方法可在計算機(jī)上創(chuàng)建隊(duì)列,實(shí)現(xiàn)代碼如下:

            System.Messaging.MessageQueue.

            Create(@.private$mq);

           發(fā)送消息

            應(yīng)用程序引用消息隊(duì)列后,就可以進(jìn)行發(fā)送和接收消息操作。發(fā)送的消息可以分為簡單消息和復(fù)雜消息,簡單消息類型就是常用的數(shù)據(jù)類型,例如整型、字符串等數(shù)據(jù);復(fù)雜消息的數(shù)據(jù)類型通常對應(yīng)于系統(tǒng)中的復(fù)雜數(shù)據(jù)類型,例如結(jié)構(gòu)體和類對象等。

            簡單消息的發(fā)送示例如下:

            Mq.Send(1000); //發(fā)送整型數(shù)據(jù)

            1000

            Mq.Send(“This is a test

            message!”); //發(fā)送字符串

            復(fù)雜消息的發(fā)送和簡單消息的發(fā)送大同小異,只是發(fā)送時,通常不是直接給出發(fā)送的消息內(nèi)容,而是代表發(fā)送消息內(nèi)容的變量。下面的代碼分別通過消息變量和復(fù)雜數(shù)據(jù)類型變量發(fā)送一條復(fù)雜消息。

            下面的代碼中發(fā)送的消息由消息變量表示:

            Message Msg;

            Msg=new Message(“A Complex

            Message!”);

            Msg.Label=”This is the label”;

            Msg.Priority=MessagePriority.High; Mq.Send(Msg);

            下面的代碼中發(fā)送的消息由復(fù)雜數(shù)據(jù)類型變量表示,Customer為自定義的一個類:

            Customer customer = new

            Customer();

            customer.LastName = Copernicus;

            customer.FirstName = Nicolaus;

            Mq.Send(customer);

           接收消息

            接收消息相比發(fā)送消息要復(fù)雜一些。接收消息有兩種方式:通過Receive方法接收消息同時永久性地從隊(duì)列中刪除消息;通過Peek方法從隊(duì)列中取出消息而不從隊(duì)列中移除該消息。如果知道消息的標(biāo)識符(ID),還可以通過ReceiveById方法和PeekById方法完成相應(yīng)的接收消息操作。

            接收消息的代碼如下:

            Mq.Receive(); //或

            Mq.ReceiveById(ID);

            Mq.Peek(); // 或

            Mq.PeekById(ID);

            閱讀消息

            只有通過根據(jù)通信雙方的約定將接收到的消息中信息提取出來,傳遞的消息才有價值,因此接收到消息以后還必須能讀出消息中包含的信息。在發(fā)送端的應(yīng)用程序發(fā)送的消息和消息隊(duì)列中的傳輸消息的格式不同,因而發(fā)送端的應(yīng)用程序發(fā)送出去的消息經(jīng)過序列化以后才發(fā)送給了消息隊(duì)列,這一過程由系統(tǒng)自動完成了,程序開發(fā)人員不必為此編寫代碼,然而在接收到消息后就需要對接收的消息進(jìn)行反序列化。

            消息的反序列化可以通過Visual Studio和.NET Framework附帶的三個預(yù)定義的格式化程序來完成:XMLMessageFormatter對象(MessageQueue組件的默認(rèn)格式化程序設(shè)置)、BinaryMessageFormatter對象、ActiveXMessageFormatter對象。由于后兩者格式化后的消息通常不能被用戶閱讀,所以經(jīng)常采用XMLMessageFormatter對象對接收的消息進(jìn)行反序列化。

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

            關(guān)閉消息隊(duì)列

            關(guān)閉消息隊(duì)列可以通過Close函數(shù)來實(shí)現(xiàn),代碼如下:

            Mq.Close();

            結(jié)語

             為各行業(yè)客戶提供更加可靠便捷的。消息隊(duì)列技術(shù)保證設(shè)備與數(shù)據(jù)中心之間進(jìn)行良好的通信。通過對 上,發(fā)送、接收和閱讀消息工作過程的講解說明消息隊(duì)列技術(shù)簡單實(shí)用。MSMQ技術(shù)的 通信系統(tǒng)已經(jīng)在國內(nèi)某大型客車企業(yè)生產(chǎn)追蹤系統(tǒng)中得到應(yīng)用。


          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();