dreamdocker

 

 

一、       安装地址

控制面板-->程序和功能 --> 打开或关闭windows功能-->把msmq服务器全选择。

 

 

 

二、 配置消息队列

 

 

 

设置你消息队列的权限问题,否则可能会访问被拒绝。

 

 

 

设置注册表信息,运行-->regedit-->打开注册表

 

 

 设置允许非验证访问:AllowNonauthenticatedRpc设置为1,NewRemoteReadServerDenyWorkgroupClient设置为1

 

 

 

 

 

 

三、 发送消息队列代码

访问地址:FormatName:DIRECT=TCP:XXX.XXX.XXX.XXX\Private$\testmqmsg

  1. 事务性消息队列发送

      

 1  #region 事务性消息队列发送信息
 2 
 3         /// <summary>
 4         /// 事务性消息队列发送信息
 5         /// </summary>
 6         /// <param name="bodyMessage">body内容信息</param>
 7         /// <param name="label">消息名称</param>
 8         /// <returns>返回数据</returns>
 9         public bool MessageQueueTransactionSend(string bodyMessage, string label, string address)
10         {
11             try
12             {
13                 MessageQueue messageQueue = new MessageQueue(address);
14                 messageQueue.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
15                 Message message = new Message();
16                 MessageQueueTransaction messageQueueTransaction = new MessageQueueTransaction();
17                 //启动事务
18                 messageQueueTransaction.Begin();
19                 message.Label = label;//报文名称
20                 message.Body = bodyMessage;//报文内容
21                 //发送消息到队列中
22                 messageQueue.Send(message, messageQueueTransaction);  //加了事务
23                 //提交事务
24                 messageQueueTransaction.Commit();
25                 messageQueueTransaction.Dispose();
26                 return true;
27             }
28             catch (Exception ex)
29             {
30                 throw new Exception(ex.Message);
31             }
32         }
33 
34         #endregion 事务性消息队列发送信息

 

 2. 非事务性消息队列发送

 

   

 1   #region 非事务性消息队列发送信息
 2         /// <summary>
 3         /// 非事务性发送消息队列
 4         /// </summary>
 5         /// <param name="label">消息名称</param>
 6         /// <param name="bodyMessage">消息内容</param>
 7         /// <param name="address">消息队列地址</param>
 8         public void SendMessage(string bodyMessage, string label, string address)
 9         {
10             try
11             {
12                 MessageQueue Queue = new MessageQueue(address);//--远程格式
13 
14                 Message Message = new Message();
15 
16                 Message.Label = label; //报文名称
17 
18                 Message.Body = bodyMessage; //报文内容
19 
20                 Message.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
21 
22                 //发生消息到队列中
23 
24                 Queue.Send(Message);
25                 Queue.Dispose();
26             }
27             catch (Exception ex)
28             {
29                 throw new Exception(ex.Message);
30             }
31         }
32         #endregion 非事务性消息队列发送信息

 

四、接收消息队列代码

     1. 全部接收

 1   #region 获取对应路径下所有的消息队列的消息
 2   /// <summary>
 3         /// 获取对应路径下所有的消息队列的消息
 4         /// </summary> 
 5         public Message[] GetAllMessage(string address)
 6         {
 7 
 8             MessageQueue Queue = new MessageQueue(address);
 9 
10             Message[] allMessage = Queue.GetAllMessages();
11 
12             XmlMessageFormatter formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
13 
14             for (int i = 0; i < allMessage.Length; i++)
15             {
16 
17                 allMessage[i].Formatter = formatter;
18 
19             }
20 
21             Queue.Purge();//清空队列
22             Queue.Dispose();
23 
24             return allMessage;
25         }
26 
27         #endregion 获取对应路径下所有的消息队列的消息
28

2. 接收单条记录

 1         #region 接收消息队列第一条信息,并删除
 2 
 3         /// <summary>
 4         /// 接收消息队列第一条信息,并删除
 5         /// </summary>
 6         /// <param name="address">消息队列地址</param>
 7         /// <returns></returns>
 8         public string ReceiveMessage(string address)
 9         {
10             MessageQueue Queue = new MessageQueue(address);
11 
12             Queue.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
13 
14             try
15             {
16                 //从队列中接收消息
17                 Message Message = Queue.Receive();
18                 string result = Message.Body.ToString();
19                 Message.Dispose();
20                 Queue.Dispose();
21                 return result;
22             }
23             catch (MessageQueueException ex)
24             {
25                 throw new Exception(ex.Message);
26             }
27             catch (Exception ex)
28             {
29                 throw new Exception(ex.Message);
30             }
31         }
32 
33         #endregion 接收消息队列第一条信息,并删除

要是提示序列化不对什么的,你就得检查过来的xml是否能被解析了

分类:

技术点:

相关文章: