У меня есть публичная очередь сообщений на локальном компьютере, которую я создал с помощью своей учетной записи пользователя. У меня также есть служба Windows на локальном компьютере, которая работает под учетной записью корпоративной службы. Я предоставил учетной записи службы полный доступ к очереди, и, тем не менее, когда служба работает, она не может читать сообщения в очереди. Я чувствую, что упускаю что-то довольно простое, но я не смог понять, что это такое.
Код:
string queuePath = "FormatName:DIRECT=TCP:127.0.0.1\MyQueue";
MessageQueue _queue = new MessageQueue(queuePath);
Когда я выполняю код, после создания объекта _queue свойство CanRead всегда имеет значение false. Я пробовал несколько разных способов установки пути к очереди («DIRECT = OS:. \ MyQueue», «PUBLIC = [guid]», а также без использования имени формата), но ничего не получилось.
В документации MSDN указано, что "CanRead имеет значение false, если очередь уже открыта с монопольным доступом для чтения (или если она открыта с неэксклюзивным доступом и эта MessageQueue запрашивает монопольный доступ), или если приложение не имеет достаточных прав для доступа к нему. "
Я убедился, что приложение имеет достаточные права (я думаю), но как я могу определить, имеет ли что-то еще «эксклюзивный доступ для чтения» к нему? Что-то еще мне не хватает?
Спасибо.