码迷,mamicode.com
首页 > Web开发 > 详细

ASP.NET中进行消息处理(MSMQ) 一

时间:2014-10-17 01:21:23      阅读:346      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   os   使用   ar   for   strong   

MSMQ是微软消息队列的英文缩写。那么什么是消息队列?这些介绍网上一大片这里就不多说了。本文对于大虾级的人物来说这只是小玩意而已,对于初学者来说这文章还是有一定的帮助,希望路过的大虾们别笑话我班门弄斧。

一、MSMQ介绍和安装消息队列
      关于MSMQ详细的介绍请大家向http://www.baidu.com/http://www.g.cn/等专家咨询。
      使用消息队列的优点:稳定、消息优先级、脱机能力以及安全性。
      消息队列分为用户创建的队列(专用队列)和系统队列,用户队列分为,。我是Windows XP,看下图所示(myQueue为自己创建的消息队列,msmqtriggersnotifiations为通用队列):
               bubuko.com,布布扣

     对消息队列有了简单的了解后,使用MSMQ进行软件开发需要安装MSMQ,安装完后就该进入实际的开发阶段。具体的安装过程就是在控制面板里“添加/删除程序”下“添加/删除Windows组件”,完成添加就OK。安装完成后就可以通过交互界添加新的消息队列,详细如下图:
          bubuko.com,布布扣
      出了上面这种交互界面来创建MSMQ外,也可以通过编程来完成,.NET框架里的MessageQueue类下有一静态方法Create,用来完成消息队列的创建,其定义如下:

bubuko.com,布布扣
 1bubuko.com,布布扣//
 2bubuko.com,布布扣// 摘要:
 3bubuko.com,布布扣//    在指定的路径中创建非事务性“消息队列”队列。
 4bubuko.com,布布扣//
 5bubuko.com,布布扣// 参数:
 6bubuko.com,布布扣//   path:
 7bubuko.com,布布扣//     要创建的队列的路径。
 8bubuko.com,布布扣//
 9bubuko.com,布布扣// 返回结果:
10bubuko.com,布布扣//     表示新队列的 System.Messaging.MessageQueue。
11bubuko.com,布布扣public static MessageQueue Create(string path);
12bubuko.com,布布扣//
13bubuko.com,布布扣// 摘要:
14bubuko.com,布布扣//     在指定的路径中创建事务性或非事务性“消息队列”队列。
15bubuko.com,布布扣//
16bubuko.com,布布扣// 参数:
17bubuko.com,布布扣//   transactional:
18bubuko.com,布布扣//     如果创建事务性队列,为 true;如果创建非事务性队列,则为 false。
19bubuko.com,布布扣//
20bubuko.com,布布扣//   path:
21bubuko.com,布布扣//     要创建的队列的路径。
22bubuko.com,布布扣//
23bubuko.com,布布扣// 返回结果:
24bubuko.com,布布扣//     表示新队列的 System.Messaging.MessageQueue。
25bubuko.com,布布扣public static MessageQueue Create(string path, bool transactional);
bubuko.com,布布扣


     实现消息队列的创建简单代码(C#),创建一个名为"myQueue"的非事务性"消息队列",如下:

bubuko.com,布布扣MessageQueue.Create(@".\private$\myQueue");


二、创建、删除和管理队列
      在.NET环境下编写Message Queue程序的前提就是需要先安装MSMQ,本文之前已经作了详细的介绍。要开发MSMQ程序就必须学习一个很重要的类(MessageQueue),该类位于名称空间System.Messageing下。其中有几个常用的方法必须掌握:
  --Create方法:创建使用指定路径的新消息队列。
  --Delete方法:删除现有的消息队列。
  --Existe方法:查看指定消息队列是否存在。
  --GetAllMessages()方法:得到队列中的所有消息。
  --GetPublicQueues方法:在“消息队列”网络中定位消息队列。
  --Peek/BeginPeek方法:查看某个特定队列中的消息队列,但不从该队列中移出消息。
  --Receive/BeginReceive方法:检索指定消息队列中最前面的消息并将其从该队列中移除。
  --Send方法:发送消息到指定的消息队列。
  --Purge方法:清空指定队列的消息。

    上述列举的方法在此就不作详细介绍,大家可以通过下面的示例程序中来体会他们各自的功能。

三、发送和序列化消息
     MSMQ消息队列中定义的消息由一个主体(body)和若干属性构成。消息的主体可以由文本、二进制构成,根据需要还可以被加密。在MSMQ 中消息的大小不能够超过4MB。发送消息是通过Send方法来完成的,需要一个Message参数。
1、发送消息:
     步骤:连接队列-->指定消息格式-->提供要发送的数据(主体)-->调用Send()方法将消息发送出去。详细见后面的示例程序。
     
2、序列化消息:
     消息序列化可以通过.NET Framework附带的三个预定义格式化程序来完成:
    --  XMLMessageFormatter对象----MessageQueue组件的默认格式化程序设置。
    --  BinaryMessageFormatter对象;
    --  ActiveXMessageFormatter对象; 
    由于后两者格式化后的消息通常不能为人阅读,所以我们经常用到的是XMLMessageFormatter对象。该对象构造方法有三种重载:

1bubuko.com,布布扣public XmlMessageFormatter();
2bubuko.com,布布扣public XmlMessageFormatter(string[] targetTypeNames);
3bubuko.com,布布扣public XmlMessageFormatter(Type[] targetTypes);

如我们后面的示例程序中用到的序列化语句:

1bubuko.com,布布扣//序列化为字符串
2bubuko.com,布布扣XmlMessageFormatter formatter = new XmlMessageFormatter(new Type[] { typeof(string) });


四、读取和接收消息
1、读取消息:
    也就是从指定队列中获取消息,详细请查看本文前面的关于消息操作的方法介绍。
2、接收消息有两种方式:
    --> 通过Receive方法--具体功能请返回本文前面有详细介绍。
    --> 通过Peek方法--具体功能请返回本文前面有详细介绍。

五、消息使用实例
     通过上面一系列的介绍,了解了MessageQueue类和常用的方法后,下面我们通过一个简单的示例程序来分析消息队列的创建、发送消息以及接收消息等相关知识点:
1、通过Create方法创建使用指定路径的新消息队列

bubuko.com,布布扣
 1bubuko.com,布布扣/// <summary>
 2bubuko.com,布布扣/// 通过Create方法创建使用指定路径的新消息队列
 3bubuko.com,布布扣/// </summary>
 4bubuko.com,布布扣/// <param name="queuePath"></param>
 5bubuko.com,布布扣public static void Createqueue(string queuePath)
 6bubuko.com,布布扣{
 7bubuko.com,布布扣    try
 8bubuko.com,布布扣    {
 9bubuko.com,布布扣        if (!MessageQueue.Exists(queuePath))
10bubuko.com,布布扣        {
11bubuko.com,布布扣            MessageQueue.Create(@".\private$\myQueue");
12bubuko.com,布布扣        }
13bubuko.com,布布扣        else
14bubuko.com,布布扣        {
15bubuko.com,布布扣            Console.WriteLine(queuePath + "已经存在!");
16bubuko.com,布布扣        }
17bubuko.com,布布扣    }
18bubuko.com,布布扣    catch (MessageQueueException e)
19bubuko.com,布布扣    {
20bubuko.com,布布扣        Console.WriteLine(e.Message);
21bubuko.com,布布扣    }
22bubuko.com,布布扣}
bubuko.com,布布扣


2、连接消息队列并发送消息到队列

bubuko.com,布布扣
 1bubuko.com,布布扣/// <summary>
 2bubuko.com,布布扣/// 连接消息队列并发送消息到队列
 3bubuko.com,布布扣/// </summary>
 4bubuko.com,布布扣public static void SendMessage()
 5bubuko.com,布布扣{
 6bubuko.com,布布扣    try
 7bubuko.com,布布扣    {
 8bubuko.com,布布扣        //连接到本地的队列
 9bubuko.com,布布扣        MessageQueue myQueue = new MessageQueue(".\\private$\\myQueue");
10bubuko.com,布布扣        
11bubuko.com,布布扣        Message myMessage = new Message();
12bubuko.com,布布扣        myMessage.Body = "消息内容";
13bubuko.com,布布扣        myMessage.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
14bubuko.com,布布扣        //发送消息到队列中
15bubuko.com,布布扣        myQueue.Send(myMessage);
16bubuko.com,布布扣    }
17bubuko.com,布布扣    catch (ArgumentException e)
18bubuko.com,布布扣    {
19bubuko.com,布布扣        Console.WriteLine(e.Message);
20bubuko.com,布布扣    }
21bubuko.com,布布扣}
bubuko.com,布布扣


3、连接消息队列并从消息队列中接收消息

bubuko.com,布布扣
 1bubuko.com,布布扣/// <summary>
 2bubuko.com,布布扣/// 连接消息队列并从队列中接收消息
 3bubuko.com,布布扣/// </summary>
 4bubuko.com,布布扣public static void ReceiveMessage()
 5bubuko.com,布布扣{
 6bubuko.com,布布扣    //连接到本地队列
 7bubuko.com,布布扣    MessageQueue myQueue = new MessageQueue(".\\private$\\myQueue");
 8bubuko.com,布布扣    myQueue.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
 9bubuko.com,布布扣    try
10bubuko.com,布布扣    {
11bubuko.com,布布扣        //从队列中接收消息
12bubuko.com,布布扣        Message myMessage = myQueue.Receive();
13bubuko.com,布布扣        string context = (string)myMessage.Body; //获取消息的内容
14bubuko.com,布布扣        Console.WriteLine("消息内容为:" + context);
15bubuko.com,布布扣    }
16bubuko.com,布布扣    catch (MessageQueueException e)
17bubuko.com,布布扣    {
18bubuko.com,布布扣        Console.WriteLine(e.Message);
19bubuko.com,布布扣    }
20bubuko.com,布布扣    catch (InvalidCastException e)
21bubuko.com,布布扣    {
22bubuko.com,布布扣        Console.WriteLine(e.Message);
23bubuko.com,布布扣    }
24bubuko.com,布布扣}
bubuko.com,布布扣


4、连接队列并清空队列的全部消息

bubuko.com,布布扣
1bubuko.com,布布扣/// <summary>
2bubuko.com,布布扣/// 清空指定队列的消息
3bubuko.com,布布扣/// </summary>
4bubuko.com,布布扣public static void ClearMessage()
5bubuko.com,布布扣{
6bubuko.com,布布扣    MessageQueue myQueue = new MessageQueue(".\\private$\\myQueue");
7bubuko.com,布布扣    myQueue.Purge();
8bubuko.com,布布扣}
bubuko.com,布布扣


5、连接队列并获取队列的全部消息

bubuko.com,布布扣
 1bubuko.com,布布扣/// <summary>
 2bubuko.com,布布扣/// 连接队列并获取队列的全部消息
 3bubuko.com,布布扣/// </summary>
 4bubuko.com,布布扣public static void GetAllMessage()
 5bubuko.com,布布扣{
 6bubuko.com,布布扣    //连接到本地队列
 7bubuko.com,布布扣    MessageQueue myQueue = new MessageQueue(".\\private$\\myQueue");
 8bubuko.com,布布扣    Message[] message = myQueue.GetAllMessages();
 9bubuko.com,布布扣    XmlMessageFormatter formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
10bubuko.com,布布扣    for (int i = 0; i < message.Length; i++)
11bubuko.com,布布扣    {
12bubuko.com,布布扣        message[i].Formatter = formatter;
13bubuko.com,布布扣        Console.WriteLine(message[i].Body.ToString());
14bubuko.com,布布扣    }
15bubuko.com,布布扣}
bubuko.com,布布扣


     上面依次的列举出来5个方法,这里我就不做测试了。上述方法全部通过测试的,我在后面提供个连接,没弄清楚的朋友可下载源程序自己去运行调试下。

bubuko.com,布布扣
  1bubuko.com,布布扣using System;
  2bubuko.com,布布扣using System.Collections.Generic;
  3bubuko.com,布布扣using System.Text;
  4bubuko.com,布布扣using System.Messaging;
  5bubuko.com,布布扣
  6bubuko.com,布布扣namespace MSMQ
  7bubuko.com,布布扣{
  8bubuko.com,布布扣    class Program
  9bubuko.com,布布扣    {
 10bubuko.com,布布扣        static void Main(string[] args)
 11bubuko.com,布布扣        {
 12bubuko.com,布布扣            Createqueue(".\\myQueue");
 13bubuko.com,布布扣            SendMessage();
 14bubuko.com,布布扣            GetAllMessage();
 15bubuko.com,布布扣            //ReceiveMessage();
 16bubuko.com,布布扣        }
 17bubuko.com,布布扣
 18bubuko.com,布布扣
 19bubuko.com,布布扣        /// <summary>
 20bubuko.com,布布扣        /// 通过Create方法创建使用指定路径的新消息队列
 21bubuko.com,布布扣        /// </summary>
 22bubuko.com,布布扣        /// <param name="queuePath"></param>
 23bubuko.com,布布扣        public static void Createqueue(string queuePath)
 24bubuko.com,布布扣        {
 25bubuko.com,布布扣            try
 26bubuko.com,布布扣            {
 27bubuko.com,布布扣                if (!MessageQueue.Exists(queuePath))
 28bubuko.com,布布扣                {
 29bubuko.com,布布扣                    MessageQueue.Create(@".\private$\myQueue");
 30bubuko.com,布布扣                }
 31bubuko.com,布布扣                else
 32bubuko.com,布布扣                {
 33bubuko.com,布布扣                    Console.WriteLine(queuePath + "已经存在!");
 34bubuko.com,布布扣                }
 35bubuko.com,布布扣            }
 36bubuko.com,布布扣            catch (MessageQueueException e)
 37bubuko.com,布布扣            {
 38bubuko.com,布布扣                Console.WriteLine(e.Message);
 39bubuko.com,布布扣            }
 40bubuko.com,布布扣        }
 41bubuko.com,布布扣
 42bubuko.com,布布扣        /// <summary>
 43bubuko.com,布布扣        /// 连接消息队列并发送消息到队列
 44bubuko.com,布布扣        /// </summary>
 45bubuko.com,布布扣        public static void SendMessage()
 46bubuko.com,布布扣        {
 47bubuko.com,布布扣            try
 48bubuko.com,布布扣            {
 49bubuko.com,布布扣                //连接到本地的队列
 50bubuko.com,布布扣                MessageQueue myQueue = new MessageQueue(".\\private$\\myQueue");
 51bubuko.com,布布扣                
 52bubuko.com,布布扣                Message myMessage = new Message();
 53bubuko.com,布布扣                myMessage.Body = "消息内容";
 54bubuko.com,布布扣                myMessage.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
 55bubuko.com,布布扣                //发送消息到队列中
 56bubuko.com,布布扣                myQueue.Send(myMessage);
 57bubuko.com,布布扣            }
 58bubuko.com,布布扣            catch (ArgumentException e)
 59bubuko.com,布布扣            {
 60bubuko.com,布布扣                Console.WriteLine(e.Message);
 61bubuko.com,布布扣            }
 62bubuko.com,布布扣        }
 63bubuko.com,布布扣
 64bubuko.com,布布扣        /// <summary>
 65bubuko.com,布布扣        /// 连接消息队列并从队列中接收消息
 66bubuko.com,布布扣        /// </summary>
 67bubuko.com,布布扣        public static void ReceiveMessage()
 68bubuko.com,布布扣        {
 69bubuko.com,布布扣            //连接到本地队列
 70bubuko.com,布布扣            MessageQueue myQueue = new MessageQueue(".\\private$\\myQueue");
 71bubuko.com,布布扣            myQueue.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
 72bubuko.com,布布扣            try
 73bubuko.com,布布扣            {
 74bubuko.com,布布扣                //从队列中接收消息
 75bubuko.com,布布扣                Message myMessage = myQueue.Receive();
 76bubuko.com,布布扣                string context = (string)myMessage.Body; //获取消息的内容
 77bubuko.com,布布扣                Console.WriteLine("消息内容为:" + context);
 78bubuko.com,布布扣            }
 79bubuko.com,布布扣            catch (MessageQueueException e)
 80bubuko.com,布布扣            {
 81bubuko.com,布布扣                Console.WriteLine(e.Message);
 82bubuko.com,布布扣            }
 83bubuko.com,布布扣            catch (InvalidCastException e)
 84bubuko.com,布布扣            {
 85bubuko.com,布布扣                Console.WriteLine(e.Message);
 86bubuko.com,布布扣            }
 87bubuko.com,布布扣        }
 88bubuko.com,布布扣
 89bubuko.com,布布扣        /// <summary>
 90bubuko.com,布布扣        /// 清空指定队列的消息
 91bubuko.com,布布扣        /// </summary>
 92bubuko.com,布布扣        public static void ClearMessage()
 93bubuko.com,布布扣        {
 94bubuko.com,布布扣            MessageQueue myQueue = new MessageQueue(".\\private$\\myQueue");
 95bubuko.com,布布扣            myQueue.Purge();
 96bubuko.com,布布扣        }
 97bubuko.com,布布扣
 98bubuko.com,布布扣        /// <summary>
 99bubuko.com,布布扣        /// 连接队列并获取队列的全部消息
100bubuko.com,布布扣        /// </summary>
101bubuko.com,布布扣        public static void GetAllMessage()
102bubuko.com,布布扣        {
103bubuko.com,布布扣            //连接到本地队列
104bubuko.com,布布扣            MessageQueue myQueue = new MessageQueue(".\\private$\\myQueue");
105bubuko.com,布布扣            Message[] message = myQueue.GetAllMessages();
106bubuko.com,布布扣            XmlMessageFormatter formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
107bubuko.com,布布扣            for (int i = 0; i < message.Length; i++)
108bubuko.com,布布扣            {
109bubuko.com,布布扣                message[i].Formatter = formatter;
110bubuko.com,布布扣                Console.WriteLine(message[i].Body.ToString());
111bubuko.com,布布扣            }
112bubuko.com,布布扣        }
113bubuko.com,布布扣    }
114bubuko.com,布布扣}
115bubuko.com,布布扣


六、复杂消息发送实例
     通过上面一系列的介绍,对于简单消息的发送和接收及消息的管理应该都不会有什么问题了,下面我在介绍一下关于复杂的消息处理,现在有这样一个需求,要求通过消息队列将一本图书信息发送到队列里,然后从消息队列里读取出来。图书的基本信息包括图书编号、图书名称、图书作者以及图书定价,这样的一个复杂的对象类型怎么来传输呢?详细如下:

bubuko.com,布布扣
 1bubuko.com,布布扣namespace MSMQ.App
 2bubuko.com,布布扣{
 3bubuko.com,布布扣    public class Book
 4bubuko.com,布布扣    {
 5bubuko.com,布布扣        private int _BookId;
 6bubuko.com,布布扣        public int BookId
 7bubuko.com,布布扣        {
 8bubuko.com,布布扣            get { return _BookId; }
 9bubuko.com,布布扣            set { _BookId = value; }
10bubuko.com,布布扣        }
11bubuko.com,布布扣
12bubuko.com,布布扣        private string _BookName;
13bubuko.com,布布扣        public string BookName
14bubuko.com,布布扣        {
15bubuko.com,布布扣            get { return _BookName; }
16bubuko.com,布布扣            set { _BookName = value; }
17bubuko.com,布布扣        }
18bubuko.com,布布扣
19bubuko.com,布布扣        private string _BookAuthor;
20bubuko.com,布布扣        public string BookAuthor
21bubuko.com,布布扣        {
22bubuko.com,布布扣            get { return _BookAuthor; }
23bubuko.com,布布扣            set { _BookAuthor = value; }
24bubuko.com,布布扣        }
25bubuko.com,布布扣
26bubuko.com,布布扣        private double _BookPrice;
27bubuko.com,布布扣        public double BookPrice
28bubuko.com,布布扣        {
29bubuko.com,布布扣            get { return _BookPrice; }
30bubuko.com,布布扣            set { _BookPrice = value; }
31bubuko.com,布布扣        }
32bubuko.com,布布扣    }
33bubuko.com,布布扣}

 

bubuko.com,布布扣
 1bubuko.com,布布扣namespace MSMQ.App
 2bubuko.com,布布扣{
 3bubuko.com,布布扣    public class MsgQueue
 4bubuko.com,布布扣    {
 5bubuko.com,布布扣        /// <summary>
 6bubuko.com,布布扣        /// 通过Create方法创建使用指定路径的新消息队列
 7bubuko.com,布布扣        /// </summary>
 8bubuko.com,布布扣        /// <param name="queuePath"></param>
 9bubuko.com,布布扣        public static void Createqueue(string queuePath)
10bubuko.com,布布扣        {
11bubuko.com,布布扣            try
12bubuko.com,布布扣            {
13bubuko.com,布布扣                if (!MessageQueue.Exists(queuePath))
14bubuko.com,布布扣                {
15bubuko.com,布布扣                    MessageQueue.Create(@".\private$\myQueue");
16bubuko.com,布布扣                    MessageBox.Show("创建队列成功!");
17bubuko.com,布布扣                }
18bubuko.com,布布扣                else
19bubuko.com,布布扣                {
20bubuko.com,布布扣                    MessageBox.Show(queuePath + "已经存在!");
21bubuko.com,布布扣                }
22bubuko.com,布布扣            }
23bubuko.com,布布扣            catch (MessageQueueException e)
24bubuko.com,布布扣            {
25bubuko.com,布布扣                MessageBox.Show(e.Message);
26bubuko.com,布布扣            }
27bubuko.com,布布扣        }
28bubuko.com,布布扣
29bubuko.com,布布扣        /// <summary>
30bubuko.com,布布扣        /// 连接消息队列并发送消息到队列
31bubuko.com,布布扣        /// </summary>
32bubuko.com,布布扣        public static bool SendMessage(Book book)
33bubuko.com,布布扣        {
34bubuko.com,布布扣            bool flag = false;
35bubuko.com,布布扣            try
36bubuko.com,布布扣            {
37bubuko.com,布布扣                //连接到本地的队列
38bubuko.com,布布扣                MessageQueue myQueue = new MessageQueue(".\\private$\\myQueue");
39bubuko.com,布布扣
40bubuko.com,布布扣                System.Messaging.Message myMessage = new System.Messaging.Message();
41bubuko.com,布布扣                myMessage.Body = book;
42bubuko.com,布布扣                myMessage.Formatter = new XmlMessageFormatter(new Type[] { typeof(MSMQ.App.Book) });
43bubuko.com,布布扣                //发送消息到队列中
44bubuko.com,布布扣                myQueue.Send(myMessage);
45bubuko.com,布布扣                flag = true;
46bubuko.com,布布扣            }
47bubuko.com,布布扣            catch (ArgumentException e)
48bubuko.com,布布扣            {
49bubuko.com,布布扣                MessageBox.Show(e.Message);
50bubuko.com,布布扣            }
51bubuko.com,布布扣            return flag;
52bubuko.com,布布扣        }
53bubuko.com,布布扣
54bubuko.com,布布扣        /// <summary>
55bubuko.com,布布扣        /// 连接消息队列并从队列中接收消息
56bubuko.com,布布扣        /// </summary>
57bubuko.com,布布扣        public static string ReceiveMessage()
58bubuko.com,布布扣        {
59bubuko.com,布布扣            //连接到本地队列
60bubuko.com,布布扣            MessageQueue myQueue = new MessageQueue(".\\private$\\myQueue");
61bubuko.com,布布扣            myQueue.Formatter = new XmlMessageFormatter(new Type[] { typeof(MSMQ.App.Book) });
62bubuko.com,布布扣            try
63bubuko.com,布布扣            {
64bubuko.com,布布扣                //从队列中接收消息
65bubuko.com,布布扣                System.Messaging.Message myMessage = myQueue.Receive();
66bubuko.com,布布扣                Book book = (Book)myMessage.Body; //获取消息的内容
67bubuko.com,布布扣                return string.Format("编号:{0},书名:{1},作者:{2},定价:{3}",
68bubuko.com,布布扣                    book.BookId,
69bubuko.com,布布扣                    book.BookName,
70bubuko.com,布布扣                    book.BookAuthor,
71bubuko.com,布布扣                    book.BookPrice);
72bubuko.com,布布扣            }
73bubuko.com,布布扣            catch (MessageQueueException e)
74bubuko.com,布布扣            {
75bubuko.com,布布扣                MessageBox.Show(e.Message);
76bubuko.com,布布扣            }
77bubuko.com,布布扣            catch (InvalidCastException e)
78bubuko.com,布布扣            {
79bubuko.com,布布扣                MessageBox.Show(e.Message);
80bubuko.com,布布扣            }
81bubuko.com,布布扣            return null;
82bubuko.com,布布扣        }
83bubuko.com,布布扣    }
84bubuko.com,布布扣}
bubuko.com,布布扣


     其实发送复杂的消息也就是在消息序列化上有些差别,别的地方与发送普通文本消息没什么大的变化,上面类里提供了创建队列,发送消息到队列,从队列获取消息三个方法,测试结果如下:
                                 bubuko.com,布布扣
     上示例中,完成了一个复杂类型的消息发送到队列及从队列中读取的演义,详细请下载代码查看:
   点击这里下载本文示例代码

     本文就简单介绍于此,更深入的学习MSMQ请查阅相关资料(如PetShop4里的定单处理策略)。

ASP.NET中进行消息处理(MSMQ) 一

标签:style   blog   http   io   os   使用   ar   for   strong   

原文地址:http://www.cnblogs.com/soundcode/p/4029953.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!