我的计算机位于域D1中,域D2中的远程服务器中有公共MSMQ。我通过vpn连接到D2,即我可以在D2中RDP机器并访问MSMQ。
我想要的是在没有RDP系统的情况下访问MSMQ(知道消息计数)。所以我为此构建了一个应用程序。我使用Impersonation模拟D2的用户(即使用D2的凭据),但问题是我无法访问“公共”MSMQ(使用Messagequeue.GetPublicQueue())并抛出异常并显示消息“工作组安装计算机不支持这项行动。“但是当我使用MessageQueue.GetPrivateQueue()时,它返回了一个私有队列的集合。
我尝试将MSMQManager用于messageCount
Path = @"Direct:OS:machine\publicqueue";
FormatName=null;
new MSMQManager.inIt(machineName, path , FormatName);
这也会导致队列不存在或未打开的异常。但我可以检查队列是否正常工作。
答案 0 :(得分:0)
答案 1 :(得分:0)
方法GetPublicQueuesByMachine()
确实不可通过远程访问。
您可以在MSDN文档中的功能矩阵中看到这一点:MessageQueue.GetPublicQueuesByMachine:
下表显示了此方法在各种工作组模式下是否可用。
Workgroup mode Available -------------- --------- Local computer No Local computer and direct format name No Remote computer No Remote computer and direct format name No
如果我在之前的建议中出错,可能就像试验网络中特定用户的访问权限一样简单。
MSDN文章Public and private queues声明:
公共队列的默认安全访问权限赋予每个人权限 将消息发送到公共队列。 必须具有特定权限 授予阅读权限。