Для тех, кто борется с этим и тянет свои волосы, как я, я наконец-то нашел что-то, что работает, когда все отклоненные предложения потерпели неудачу.
Даже если вы считаете имя хоста вашей целевой очереди хостингасистема решается правильно, не верьте .Попробуйте заменить имя хоста на IP-адрес и посмотреть, работает ли он.Это для меня.Я могу ЗАПИСАТЬ в общедоступную очередь, используя имя хоста на моем удаленном сервере без проблем, но при попытке ПРОЧИТАТЬ с него произойдет именно та ошибка, которая указана для этого вопроса.
Например, если я объявлю следующее:
private static string QueueName = @"FormatName:DIRECT=TCP:SOMEHOST\MyQueue";
private static System.Messaging.MessageQueue Queue = new System.Messaging.MessageQueue(QueueName);
Если «MyQueue» является публичной очередью на сервере SOMEHOST, следующий код успешно вставит сообщения в очередь, но всегда завершается ошибкой при получении ():
Queue.Formatter = new XmlMessageFormatter(new Type[] { typeof(String) });
// The Receive() call here is a blocking call. We'll wait if there is no message in the queue, and processing
// is halted until there IS a message in the queue.
//
try
{
Queue.Send("hello world", System.Messaging.MessageQueueTransactionType.Single);
var msg = Queue.Receive(MessageQueueTransactionType.Single);
}
catch (Exception ex)
{
// todo error handling
}
Один простойизменить способ указания местоположения очереди - это все, что необходимо для остановки сбоя функции Receive () с ужасающей ошибкой «очередь не существует или у вас недостаточно прав»:
private static string QueueName = @"FormatName:DIRECT=TCP:192.168.1.100\MyQueue";
(очевидно, язапутал IP-адреса и другую конфиденциальную информацию).Использование IP-адреса, очевидно, не является производственным сценарием, но оно указывало на некоторую проблему разрешения имен как на возможную причину ошибки.Я не могу объяснить, почему Send () работает, а Receive () нет, когда я использую имя хоста вместо IP, но я могу последовательно воспроизводить эти результаты.Пока я не могу понять, что происходит с разрешением имен, я больше не трачу день на попытки прочитать сообщения из очереди.