У меня есть приложение, использующее MSMQ, которое работает очень хорошо, когда и производитель, и потребитель находятся на одной машине.
Вчера я впервые попытался создать другого производителя, который будет работать наотдельная машина.Очередь является частной, и до этого обе стороны называли ее
string strQueueName = ".\Private$\MyQueue";
. Я пытался ссылаться на эту очередь с удаленной машины несколькими способами.Имя моего сервера - "groucho", поэтому я попытался
string strQueueName = "groucho\Private$\MyQueue";
, но это последовательно вывело исключение "неверный путь к очереди".
Один из разработчиков предложил мне попробовать следующее, что позволяет избежатьисключение:
string strQueueName = "FORMATNAME:DIRECT =OS:grouch\\private$\\SDVQueue";
Это больше не вызывает исключение, но, похоже, оно также не работает, так как я не вижу сообщений в очереди.
Сервер WindowsСервер 2008 R2.Очередь настроена (я только что заметил), чтобы «Все» могли получать и просматривать, но не отправлять, но когда я пытаюсь добавить «Отправить», я получаю диалоговое окно с сообщением об ошибке «Невозможно установить дескриптор безопасности, Ошибка: В доступе отказано".У меня do есть права администратора на этом поле.
Из других сообщений я знаю, что в игру вступают все виды безопасности, но я не вижу ошибок в журналах событий.на отправителе или на хост-компьютере.
Если это проблема безопасности, как я могу узнать, в чем проблема?
Спасибо!
Вот полный тесткод:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Messaging;
namespace RemoteQueue
{
class Program
{
static void Main(string[] args)
{
string name = "FORMATNAME:DIRECT =OS:groucho\\private$\\SDVQueue";;
string input = null;
MessageQueue queue = null;
try
{
queue = new MessageQueue(name);
string key = "key";
for (int i = 0; i < 200; i++)
{
Message msgToSend = new Message();
string value = "value_" + i;
msgToSend.Body = string.Format("{0},{1}", key, value);
Console.WriteLine("Sending message " + i);
queue.Send(msgToSend, "otherpart");
}
}
catch (MessageQueueException me)
{
Console.WriteLine("ERROR: caught message queue exception: " + me.Message);
}
Console.WriteLine("Type any key to exit...");
input = Console.ReadLine();
}
}
}