Я пытаюсь получить сообщение о очереди с моего хоста, пытаясь получить сообщение, которое я получаю "Доступ к системе очереди сообщений отклонен". сообщение. Не знаю, как решить эту проблему. Я использую Windows 7 как клиентскую систему, а сервер - это сервер Windows 2008 R2
Доступ к системе очереди сообщений отклонен
Ответ 1
Я столкнулся с тем же вопросом, который пытался написать в MSMQ через ASP.NET(Windows 7). Я добавил "Получить сообщение" "Разрешение Peek Message" и "Отправить сообщение", и теперь он работает правильно. Если вы используете это через ASP.NET, то вы, вероятно, находитесь в учетной записи IIS_IUSRS.
Ответ 2
Если вы пытаетесь прочитать сообщение из удаленной очереди, то разрешения являются основным виновником, как упоминал kprobst.
Вы также можете получить другие причины:
Ответ 3
В моем случае очереди MSMQ принадлежали моей собственной учетной записи пользователя Windows (локальный администратор), потому что они были созданы из запуска консольного приложения из Visual Studio в режиме администратора.
Мое веб-приложение работает как NETWORK SERVICE
, которое порождает
Доступ к системе очереди сообщений отклонен
ошибка.
Я исправил это, предоставив NETWORK SERVICE
полный контроль:
Управление компьютером > Службы и приложения > Очередь сообщений > Частные вопросы > Правая кнопка мыши > Свойствa > Безопасность
Перезапустите службу MSMQ и IIS:
NET STOP MSMQ
NET START MSMQ
IISRESET
Ответ 4
Есть много причин для этой ошибки. Во-первых, это может быть безопасность. Вы должны убедиться, что учетная запись, под которой работает ваше приложение, имеет доступ для чтения/записи в очередь (или с высоким уровнем разрешений, который вам нужен).
Во-вторых, убедитесь, что если очередь транзакционная, вы используете для нее правильный режим транзакции. Или, альтернативно, если очередь не является транзакционной, вы не пытаетесь передать ей режим транзакции при чтении или записи.
Ответ 5
Для нас это потому, что тестовая программа создала очередь...
Решение: удалите очередь и позвольте ей воссоздать правильные процессы, запущенные под правильными учетными данными.
Ответ 6
Server2008:
-
Управление
Panel->Administration Tools->Computer Management
. -
В
Computer Management->Services and Applications->Message Queuing->Private Queues
. - Щелкните правой кнопкой мыши
[UrQueueName] -> Properties -> Security
- Установите всех в полный доступ
- Установите ANONYMOUS LOGON для полного контроля.
- В компьютере
Management -> Services
- Служба очереди повторных сообщений.
В Windows 7 (Клиент):
Создайте очередь сообщений Rc с помощью FormatName:DIRECT=OS:MachineName\private$\UrQueueName
Пример:
rcmq = new System.Messaging.MessageQueue(string.Format("FormatName:DIRECT=OS:{0}\\private$\\{1}", rcMachineName,rcQueueName));
Ответ 7
Это может превратиться в неприятную проблему. В моем сценарии исключение было брошено на BeginReceive(). У меня была существующая очередь сообщений, которая была создана приложением .Net 2.0, и я пытался использовать ее в другом приложении, которое выполнялось на .Net 4.0. Решение состояло в том, чтобы удалить MSMQ (расположенный в C:\Windows\System32\msmq\storage\lqs) и воссоздать его с .Net 4.0.
Ответ 8
В нашем случае изменение идентификатора пула приложений веб-службы, вызывающего Peek MSMQ, помогло с этой проблемой, которая началась после миграции сервера.
Нам пришлось изменить идентификатор пула приложений с "ApplicationPoolIdentity" на "NetworkService". Он работал потом.
Ответ 9
Это сработало для нас: Менеджер сервера → Функции → Очередь сообщений → Щелкните правой кнопкой мыши → Свойства → Безопасность сервера
Отменить проверку: "Отключить вызовы RPC без аутентификации"
Ответ 10
Благодаря этому сообщению я смог удалить проблему "Отказано в доступе": https://codifying.wordpress.com/2012/04/16/msmq-solving-access-denied-errors-for-private-queues/
Исходная задача
... разочаровывает, очередь указана в разделе "Управление сервером" в "Частные очереди", но я не имел возможности:
- Удалить = > Разрешен отказ
- Изменить разрешение безопасности = > Отказано в доступе
- Просмотр оставшегося сообщения в очереди = > Отказано в доступе
Решение
- Создайте очередь вручную (используется позже), позвоните ей FA1
- Закрыть услуги: Очередь сообщений (+ Адаптер прослушивателя для Net.Msmq)
- Затем перейдите к System32/msmq/storage/lqs
- Найдите последний файл для FA1 (проверьте правильность файла, каждый файл здесь можно открыть с помощью блокнота), а затем скопируйте значение атрибута Security
- Найдите файл, связанный с очередью проблем, вставьте в него значение, скопированное на предыдущем шаге.
- Удалить файл, связанный с FA1
- Откройте две ранее закрытые службы
- Перейдите в Диспетчер серверов
Сообщение об ошибке больше не должно появляться
Но... у вас может возникнуть другая проблема с вашим программным обеспечением при попытке прочитать/подключиться к этой очереди, он будет жаловаться, что у него недостаточно привилегий, поэтому последний шаг - перейти к расширенным свойствам этой очереди и установите полный доступ к управлению всем (ну, может быть, вы укажете конкретного пользователя, но это то, что я сделал, чтобы гарантировать, что я не заблокирован на своем собственном dev-сервере).
Ответ 11
Пожалуйста, войдите в свой диспетчер серверов и проверьте свойства очереди сообщений, которым назначены "отправить сообщение", "сообщение peek" и другие необходимые привилегии для пользователя IIS или всех.