Ошибка чтения MSMQ (отказано в доступе)

#c# #.net #msmq

#c# #.net #msmq

Вопрос:

Я создаю очередь на своем локальном компьютере в каком-то другом процессе следующим образом:

 MessageQueue.Create(@".private$sampleQueue");
 

И в моем процессе чтения я присоединяю к нему следующее:

 var queue = new MessageQueue(@".private$sampleQueue");
 

Когда я пытаюсь это сделать queue.Peek() , я получаю исключение с отказом в доступе. Я не в домене, это просто мой локальный компьютер рабочей группы. Есть идеи?

Комментарии:

1. Я столкнулся с такой ситуацией. Удивительно, но как только я прочитал статистику очереди с помощью окна управления компьютером, все снова было в порядке.

Ответ №1:

MSMQ использует разные протоколы для своей работы:

  • Передача информации (отправка сообщений) использует протокол MSMQ.
  • Получение информации (получение сообщений, получение свойств и т. Д.) С использованием протокола RPC.

Если это не простая проблема с разрешениями (что очень вероятно), тогда вам нужно это сообщение в блоге:

Понимание того, как безопасность MSMQ блокирует трафик RPC http://blogs.msdn.com/b/johnbreakwell/archive/2010/03/24/understanding-how-msmq-security-blocks-rpc-traffic.aspx

Приветствую
, Джон

Ответ №2:

Если щелкнуть правой кнопкой мыши по очереди в разделе «Управление компьютером» и выбрать «Свойства», установлены ли соответствующие разрешения на вкладке «Безопасность»?

Комментарии:

1. Я скоро проверю, но я хотел бы отметить, что другой процесс, тот, который создает очередь, также может отправлять сообщение. Тем временем процесс чтения выполняется как служба Windows.

Ответ №3:

Учетные данные, используемые процессом, создающим очередь, должны отличаться от учетных данных процесса, используемого для чтения очереди. Если так и должно быть, то вам нужно будет специально предоставить необходимые разрешения на чтение в очереди после ее создания.

Комментарии:

1. Я предоставил полное разрешение очереди и все еще ничего, поэтому я собираюсь проверить ссылку, которую Джон дал мне позже сегодня.