日期:2014-05-18  浏览次数:21112 次

MSMQ: C# MSMQ编程问题
现在想在局域网内用MSMQ通讯,计算机都在工作组内。请问在工作组内实现MSMQ通讯的步骤是什么?谢谢。
在常报的异常是:
对消息队列系统的访问被拒绝
队列路径名无效
远程计算机不可用
换下面这种方式表示地址也不行哦。
1.一种是以机器名(计算机名)的表示方法
FormatName:DIRECT=OS:计算机名\Private$\队列名称
比如: FormatName:DIRECT=OS:Server01\Private$\Demo
2.另一种是以IP地址的表示方法
FormatName:DIRECT=tcp:IP地址\Private$\队列名称
下面是我实现的代码,该代码在本机上实现收发消息都是正常的,缺不能实现2台机器间的通讯。

  private void FSend() //发送
  {
  string queuename = ".\\private$\\testQueue";//队列名称
  MessageQueue q;
  if (MessageQueue.Exists(queuename))
  {
  q = new System.Messaging.MessageQueue(queuename);
  }
  else
  {
  q = MessageQueue.Create(queuename);
  q.SetPermissions("Everyone", MessageQueueAccessRights.FullControl);
  }
  System.Messaging.Message m = new System.Messaging.Message();
  m.Label = "MessageLabel gaga"; //描述消息的字串
  m.Body = "MessageBody gaga"; //消息的主体
  q.Send(m); //发送

  MessageBox.Show("发送成功");
  }

  private void Recevie() //接受
  {
  try
  {
  //两种Path名都不行 //string queuename = "kjxin08\\private$\\testQueue";//队列名称
  MessageQueue q = new MessageQueue(@"FormatName:DIRECT=tcp:192.168.150.34\Private$\testQueue");
  //q.Formatter = new XmlMessageFormatter(new Type[] { typeof(aa) });


  System.Messaging.Message m = q.Receive();
  m.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
  label1.Text = m.Body.ToString();
  MessageBox.Show("接受成功");
  }
  catch (MessageQueueException ex)
  {
  MessageBox.Show(ex.Message);
  }
  }

哪位高手帮解决一下了。 THS

------解决方案--------------------
http://hi.baidu.com/yaowangdexiaoniao/blog/item/d1c3b586b9503c3e67096e36.html
------解决方案--------------------
在计算机管理中

找到那个消息队列,右键点击,找到权限设置

一般是有2个角色,把那个 完全控制 打勾 就可以了
------解决方案--------------------
在计算机管理中
找到那个消息队列,右键点击,找到权限设置
一般是有2个角色,把那个 完全控制 打勾 就可以了

messageQueue.SetPermissions("ANONYMOUS LOGON", MessageQueueAccessRights.FullControl);
messageQueue.SetPermissions("administrator", MessageQueueAccessRights.FullControl);

请问针对不同的用户如何设置权限??不会就上面的语句吧????
如接受消息的计算机登录用户为 test
MSMQ服务器发送的消息只想 test 来接收
该如何设置呢??
THS