远程接收msmq消息队列的问题

yjp200666 2012-02-13 04:11:49
怎样实现接收远程主机上的队列消息啊?请问大家又做过这方面的开发啦?参考交流一下。谢谢..
...全文
544 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjp200666 2012-02-20
  • 打赏
  • 举报
回复
以上的答案,早就试过了。。不是代码的问题。。。

后来切换用户登录,运行程序就可以了。
wdhans 2012-02-14
  • 打赏
  • 举报
回复
--- app.config ---
<add key="path" value="FormatName:DIRECT=OS:<机器名或地址>\private$\<消息对列名>" />

-- code --
string MSMQPath = ConfigurationManager.AppSettings["path"];
messageQueue = new MessageQueue(MSMQPath);
messageQueue.Formatter = new BinaryMessageFormatter();

.....

Message msg = messageQueue.Receive();
string msgContent = (string)msg.body;
pmaikej 2012-02-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 yjp200666 的回复:]
怎样实现接收远程主机上的队列消息啊?请问大家又做过这方面的开发啦?参考交流一下。谢谢..
[/Quote]

通过调用windows\system32\mqoa.dll 这个Message Queuing ActiveX Interface API函数就可以做到;
下面是一个简单的例子供参考

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using MSMQ;
namespace MyTest
{
public class Form2 : System.Windows.Forms.Form
{
private System.ComponentModel.Container components = null;

MSMQ.MSMQQueueInfoClass mqinfor=new MSMQQueueInfoClass();
private void Form2_Load(object sender, System.EventArgs e)
{


}

private void button1_Click(object sender, System.EventArgs e)
{
mqinfor.FormatName="Direct=TCP:" + this.txthost.Text + "\\" + this.txtpath.Text;
MSMQ.MSMQQueue mq=mqinfor.Open(MSMQ.MQACCESS.MQ_SEND_ACCESS.GetHashCode(),MSMQ.MQSHARE.MQ_DENY_NONE.GetHashCode());
MSMQ.MSMQMessageClass msg=new MSMQMessageClass();
msg.Label="activeX Test";
msg.Body=this.txtmsg.Text;

MSMQ.MSMQTransactionClass MQ_NO_TRANSACTION=new MSMQTransactionClass();

object a=MQ_NO_TRANSACTION;
msg.Send(mq,ref a);


}

private void button2_Click(object sender, System.EventArgs e)
{
try
{
mqinfor.FormatName="Direct=TCP:" + this.txthost.Text + "\\" + this.txtpath.Text;

MSMQ.MSMQQueue mq=mqinfor.Open(MSMQ.MQACCESS.MQ_RECEIVE_ACCESS.GetHashCode(),MSMQ.MQSHARE.MQ_DENY_NONE.GetHashCode());

MSMQ.MSMQTransactionClass MQ_NO_TRANSACTION=new MSMQTransactionClass();
object a=MQ_NO_TRANSACTION;
bool WantDestinationQueue=false;
object b=WantDestinationQueue;
bool WantBody =true;
object c=WantBody;
long ReceiveTimeout =100;
object d=ReceiveTimeout;
bool WantConnectorType=false;
object e1=WantConnectorType;
MSMQ.MSMQMessage msg=mq.Receive(ref a,ref b,ref c,ref d,ref e1);
this.txtrece.Text=DateTime.Now.ToString() + " " + msg.Body.ToString();
}
catch(Exception e2)
{
MessageBox.Show(e2.Message);
}
}
}
}


yjp200666 2012-02-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wdhans 的回复:]

看看是否是队列权限的问题

1. 添加 Anonymous Logon 用户, 默认只有发送消息权限
2. 添加 Everyone 用户 ,完全控制权限,选择框基本全选
[/Quote]

这个方法用过了,还是不行的。。谢谢
夜色镇歌 2012-02-13
  • 打赏
  • 举报
回复
msmq 研究不明白~
wdhans 2012-02-13
  • 打赏
  • 举报
回复
看看是否是队列权限的问题

1. 添加 Anonymous Logon 用户, 默认只有发送消息权限
2. 添加 Everyone 用户 ,完全控制权限,选择框基本全选

yjp200666 2012-02-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 happy09li 的回复:]

参考

解决msmq接收远程主机私有队列消息的问题!
[/Quote]

感谢你的回复,已经试过了。。问题还是存在。。就是不能远程接收msmq队列消息。
yjp200666 2012-02-13
  • 打赏
  • 举报
回复
1.我已经加入了域。
2.已经设置了权限。
3.可以远程发送消息。
为什么就不能接收到远程主机的msmq消息队列?谁有开发过相当的项目啦。。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧