一、 安装地址
控制面板-->程序和功能 --> 打开或关闭windows功能-->把msmq服务器全选择。
二、 配置消息队列
设置你消息队列的权限问题,否则可能会访问被拒绝。
设置注册表信息,运行-->regedit-->打开注册表
设置允许非验证访问:AllowNonauthenticatedRpc设置为1,NewRemoteReadServerDenyWorkgroupClient设置为1
三、 发送消息队列代码
访问地址:FormatName:DIRECT=TCP:XXX.XXX.XXX.XXX\Private$\testmqmsg
- 事务性消息队列发送
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是否能被解析了