#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. Я предоставил полное разрешение очереди и все еще ничего, поэтому я собираюсь проверить ссылку, которую Джон дал мне позже сегодня.