我正在尝试获取远程计算机中特定专用队列的消息计数。 我可以从我当地的机器上获取计数。
LOCALMACHINE :
path=@".\Private$\Sample";
RemoteMachine:
Path=@"RemoteMachineName\Private$\Sample";
完整代码:
当我尝试远程机器路径时,它会抛出错误无效路径。
如果有人可以指导我解决问题,我将不胜感激?
var path ="FormatName:Direct=OS:RemoteMachineName\\private$\\sample";
MessageQueue queuename = new MessageQueue(path);
var mgmt = new MSMQManagement();
object machine = "RemoteMachineName";
object queuename = queue.Path;
object formatname = "Direct=OS";
mgmt.Init(ref machine, ref queuename, ref formatname);
int messageCount = mgmt.MessageCount;
MessageBox.Show(string.Format("Queue has {0} items", messageCount));
答案 0 :(得分:1)
有三种选择:
Understanding how MSMQ security blocks RPC traffic
干杯
约翰
答案 1 :(得分:1)
试试这段代码..
MSMQManagement _manager = new MSMQManagement();
_manager.Init("MACHINE", null, @"DIRECT=OS:MACHINE\PRIVATE$\sample");
Console.WriteLine(_manager.MessageCount);
Marshal.ReleaseComObject(_manager);
答案 2 :(得分:0)
//strHostName is Machine name/IP from which you have to get queue
//MSMQManagement present in COM library which is present at "C:\Program Files (x86)\Microsoft SDKs\Windows"
PrivateQueueList = MessageQueue.GetPrivateQueuesByMachine(strHostName);
int count = PrivateQueueList.Count();
MSMQManagement QueueManagement = new MSMQManagement[count];
MSMQManagement msmq = null;
int index = 0;
foreach(var queue in PrivateQueueList)
{
msmq = new MSMQManagement();
object machine = queue.MachineName;
object path = null;
object formate=queue.FormatName;
msmq.Init(ref machine, ref path,ref formate);
QueueManagement[index] = msmq;
index++;
}
foreach(var queue in QueueManagement)
{
int count= queue.MessageCount();
Console.WriteLine(queue.QueueName+ " ="+ count);
}
在这里,您可以在任何可ping的计算机上获得所有私有msmq消息计数。 让我们首先通过ping来确认机器是否处于活动状态。 如果msmq在.Init方法中有零消息,则会显示错误,因此您可以在try catch和catch set count = 0中使用该语句并且它将被解决(我知道这是错误的方式,但是没有其他方法可以处理那个错误)。 有关更多详细信息,请访问MSDN http://msdn.microsoft.com/en-us/library/ms705997(v=vs.85).aspx
答案 3 :(得分:0)
这是我用于bith远程和本地队列的释义片段。你需要正确地获取格式名称,这有时会很痛苦。
“msmqManagement.Init”下面的参数对我来说与你的例子不同,也许试试。
提示 - 发布实际的异常跟踪,它会有所不同。我不认为你得到“错误无效路径”,堆栈跟踪会给你线索,例如机器名称解析问题等。
MessageQueue mq = new MessageQueue(path);
var formatName = mq.FormatName;
var msmqManagement = new MSMQManagement();
msmqManagement.Init(machineName, null, formatName);
var messageCount = msmqManagement.MessageCount;
Marshal.ReleaseComObject(msmqManagement);
另外 - 说明你使用的是什么版本的MSMQ ....