MSMQ: возможно ли получить количество сообщений в удаленной частной очереди? - PullRequest
7 голосов
/ 05 мая 2011

Я знаю, что есть другие вопросы по этому вопросу, но на самом деле я не отвечаю на этот вопрос.

Код, который у меня есть:

using (var mQ = new MessageQueue(qPath))
            {
                Console.WriteLine("machine: {0}, name : {1}, path : {2}", mQ.MachineName ,mQ.QueueName, mQ.Path);
                Console.WriteLine("message count : {0}",mQ.GetAllMessages().Count());
            }    

Когда я пытаюсь GetAllMessages () в локальной очереди, конечно, все работает:

string qPath = @".\private$\queueName";

Однако, когда я пробую очередь на удаленном компьютере в том же домене, который я могу успешно пропинговать только с помощью имени компьютера, я получаю эту ошибку:

Invalid queue path name. at System.Messaging.MessageQueue.ResolveFormatNameFromQueuePath

Я пробовал:

string qPath = @"remoteMachineName\private$\queueName";
string qPath = @"remoteMachineName.qualified.net\private$\queueName";
string qPath = @"DIRECT=OS:remoteMachineName.qualified.net\private$\queueName";
string qPath = @"DIRECT=OS:remoteMachineName\private$\queueName";
string qPath = @"DIRECT=OS:ip.ad.re.ss\private$\queueName";
string qPath = @"DIRECT=TCP:ip.ad.re.ss\private$\queueName";

Все они дают мне ту же ошибку.

Документация в сети гласит, что частные очереди МОГУТ быть найдены, если вы знаете полный «путь».

Это правда? если да, то как компилировать полный путь ??

ура

Ответы [ 3 ]

1 голос
/ 05 мая 2011

Исключение показывает, что имя пути по какой-то причине не может быть преобразовано в имя формата.Попробуйте создать очередь с именем формата

http://msdn.microsoft.com/en-us/library/ch1d814t.aspx

Как, например, Formatname: DIRECT = OS: ip.ad.re.ss \ private $ \ queueName

CheersJohn

0 голосов
/ 15 мая 2011

Да, вам не хватает FormatName. например "FORMATNAME: Прямая = ОС: локальный \ частный $ \ сообщения"

0 голосов
/ 15 мая 2011

Посетите эту страницу

"FormatName:Direct=OS:machinename\\private$\\queue"
...