我想设置一个msmq来插入消息和远程接收消息。 我要拥有专用队列的服务器在Windows Server 2016 OS上运行 我成功了,直到远程插入消息为止
我无法实现的是将Peek()进入私有队列或远程接收来自私有队列的消息
调试代码时,我发现messageQueue对象中canRead的值为false
我尝试将访问模式更改为Receive,SendAndReceive,Peek,ReceiveAndAdmin,PeekAndAdmin,实际上是所有可用模式,但最终所有模式都将canRead的值设置为false
已为端口1801启用入站规则
已启用端口135、2103、2105的入站规则和出站规则
远程服务器是通过Google云控制台托管的,因此已为上述所有端口添加了防火墙规则(入口)
远程服务器在Windows Server 2016上运行 我要运行代码进行测试的系统正在Windows 10专业版上运行
private static string QueueName = "FormatName:Direct=TCP:Rdp public Ip Address\\private$\\taskQueue";
public MsmQueue getMsmq()
{
MessageQueue msgQ = new MessageQueue(QueueName);
MsmQueue msmq = new MsmQueue();
if (IsQueueEmpty())
{
return msmq;
}
Object o = new Object();
System.Type[] arrTypes = new System.Type[2];
arrTypes[0] = msmq.GetType();
arrTypes[1] = o.GetType();
msgQ.Formatter = new XmlMessageFormatter(arrTypes);
msmq = ((MsmQueue)msgQ.Receive().Body);
return msmq;
}
private bool IsQueueEmpty()
{
bool isQueueEmpty = false;
try
{
MessageQueue msgQ = new MessageQueue(QueueName, QueueAccessMode.Peek);
Message message = msgQ.Peek(); // the code breaks at this point and throws the exception.
isQueueEmpty = false;
}
catch (MessageQueueException e)
{
if (e.MessageQueueErrorCode == MessageQueueErrorCode.IOTimeout)
{
isQueueEmpty = true;
}
}
return isQueueEmpty;
}
我希望收到msmq内部的消息,而不是我得到的是此异常队列不存在或您没有足够的权限执行该操作