远程接收msmq消息队列的问题 怎样实现接收远程主机上的队列消息啊?请问大家又做过这方面的开发啦?参考交流一下。谢谢.. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1.我已经加入了域。2.已经设置了权限。3.可以远程发送消息。为什么就不能接收到远程主机的msmq消息队列?谁有开发过相当的项目啦。。 参考解决msmq接收远程主机私有队列消息的问题! 感谢你的回复,已经试过了。。问题还是存在。。就是不能远程接收msmq队列消息。 看看是否是队列权限的问题1. 添加 Anonymous Logon 用户, 默认只有发送消息权限2. 添加 Everyone 用户 ,完全控制权限,选择框基本全选 msmq 研究不明白~ 通过调用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); } } }} --- 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; 有关那个gridview的,懂的人进来帮帮俺吧 请教个有关坐标转换的算法 弱弱的问一句。。c#中怎么添加DLL的引用 远程访问数据库 那个大侠能讲讲语音聊天室的原理? 操作失败:已有打开的与此连接相关联的 DataReader,必须首先将它关闭 单击退出菜单时,询问是否退出,YES-退出,NO-不退出。那么如何在单击表单的叉叉按钮关闭时也响应这种事件呢?TKS。 COMException (0xC3EC7D08) 这个异常是什么意思. 【在线等】!~!~!~ lock局部变量有什么作用? c#如何在一个事件中引发另一个事件? 【一个小问题】event的
2.已经设置了权限。
3.可以远程发送消息。
为什么就不能接收到远程主机的msmq消息队列?谁有开发过相当的项目啦。。
感谢你的回复,已经试过了。。问题还是存在。。就是不能远程接收msmq队列消息。
2. 添加 Everyone 用户 ,完全控制权限,选择框基本全选
通过调用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);
}
}
}
}
<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;