.net中使用訊息傳遞資料

來源:互聯網
上載者:User

使用訊息傳遞資料時,一般情況下資料量較少。在我所使用的項目中,使用它最大的好處就是不用考慮對方是否是運行狀態,只要對方上線,它就可能收到。在項目中,它的作用是在產生較大的資料時,先用訊息進行通知,在對方收到訊息後,再從Web服務來收取,代碼如下,有改動:

發送端:

 1            messageModel.transfersModel tmodel = new messageModel.transfersModel(sourcetext.Trim(), itype, content.Trim());
 2            using (MessageQueue queue = new MessageQueue("FormatName:DIRECT=tcp:" + address.Trim() + @"\Private$\message"))
 3            {
 4                MessageQueueTransaction transMes = new MessageQueueTransaction();
 5                try
 6                {
 7                    transMes.Begin();
 8                    queue.Send(tmodel, "transferMessage : { " + sourceip.Trim() + " }");
 9                    transMes.Commit();
10                }
11                catch
12                {
13                    transMes.Abort();
14                }
15            }
16

接收端:

 1        private Thread receiveMessageThread;
 2
 3        private void Form_Load(object sender, EventArgs e)
 4        {
 5            /**////接收訊息
 6            this.queue = new MessageQueue(@".\Private$\tgatemessage");
 7            System.Type[] types = new Type[] { typeof(messageModel.transfersModel) };
 8            queue.Formatter = new XmlMessageFormatter(types);
 9
10            this.receiveMessageThread = new Thread(new ThreadStart(this.getMessage));
11            this.receiveMessageThread.IsBackground = true;
12            this.receiveMessageThread.Start();
13        }
14
15
16
17        接收訊息#region 接收訊息
18        private MessageQueue queue;
19        /**//// <summary>
20        /// 取訊息
21        /// </summary>
22        private void getMessage()
23        {
24            while (true)
25            {
26                MessageEnumerator messageEnum = queue.GetMessageEnumerator2();
27                {
28                    while (messageEnum.MoveNext())
29                    {
30                        System.Messaging.Message message = queue.PeekById(messageEnum.Current.Id);
31                        messageModel.transfersModel tmodel = message.Body as messageModel.transfersModel;
32                        if (tmodel != null)
33                        { 
34                            //取資料並儲存
35                            //調用方法將資料儲存,如果正常儲存則將對應訊息資料清除
36                            //if(new dataFromService().saveData(tmodel.Mestype, takeData))
37                                message = queue.ReceiveById(messageEnum.Current.Id);    //刪除
38                        }
39                    }
40                }
41                Thread.Sleep(1000);
42            }
43        }
44        #endregion
45
46

接收端使用一個單獨的線程來監測訊息,而訊息的讀取本身具有阻塞,所以在沒有新訊息時此線程處於停止狀態,在有新的訊息時才運行,運行完成後再次阻塞。發送端與接收端共用了一個資料類,內容可根據自己的需要進行定義。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.