NServiceBus и MSMQ: как изменить разрешения по умолчанию для очереди?

Моя команда делает первую попытку использовать NServiceBus (v2.0), используя MSMQ в качестве резервного хранилища. Мы застреваем с разрешениями очереди.

Мы используем его в приложении веб-форм, где учетная запись пользователя, под которой работает веб-сайт, не является администратором на машине.

Когда NServiceBus создает очередь MSMQ, он предоставляет группе локальных администраторов полный контроль, а локальным всем и анонимным группам разрешения на отправку сообщений.

Но позже, в рамках инициализации очереди, NServiceBus пытается прочитать все свои сообщения. Вот где мы сталкиваемся с ошибкой разрешений. Поскольку веб-сайт не работает с правами администратора, ему не разрешено читать сообщения.

Как другие люди справляются с этим? Ваши приложения запускаются от имени администраторов? Или вы сначала создаете очередь MSMQ в своем коде, предоставляя ей необходимые разрешения, чтобы NServiceBus не создавал ее? Или нам не хватает какой-то конфигурации? Или мы, вероятно, пишем наш код, который неправильно использует NServiceBus, чтобы работать с этим?


person Amy T    schedule 21.05.2010    source источник


Ответы (4)


Мы создаем очереди в подклассе установщика и выполняем его как часть установки msi. Право собственности на очередь - это ярлык, но соответствующие разрешения можно установить с помощью AccessControlList:

MessageQueue queue = MessageQueue.Create(queueName, true);
AccessControlList permissions = new AccessControlList();
permissions.Add(new MessageQueueAccessControlEntry(
    new Trustee(this.serviceProcessInstaller.Username),
    MessageQueueAccessRights.FullControl, 
    AccessControlEntryType.Set));
// Add additional permissions for admins & message-sending accounts
queue.SetPermissions(permissions);

Я считаю, что функция автоматического создания очереди в NServiceBus лучше подходит для разработки, а не для развертывания.

person Sam    schedule 25.05.2010
comment
Да, в конце концов я услышал нечто подобное в группе NServiceBus: tech.groups. yahoo.com/group/nservicebus/message/7391. Автоматическое создание очереди предназначено для среды разработки, а не производства, и мы должны сами создать очередь и предоставить ей необходимые разрешения. - person Amy T; 25.05.2010
comment
Начиная с версии 3.0 мы представили более явный этап установки, который решает всю проблему с разрешениями. - person Udi Dahan; 20.03.2012
comment
Уди, не могли бы вы дать ссылку на документацию, чтобы узнать, как правильно решить эту проблему с версией 3.0? - person BlackICE; 28.08.2013

Это сообщение в блоге должно помочь:

http://blogs.msdn.com/johnbreakwell/archive/2009/08/03/default-msmq-queue-permissions-have-changed-in-msmq-4-0.aspx

Особенно:

«Если вы хотите установить разрешения при создании очередей, вы всегда можете создать требуемый дескриптор безопасности и передать его в параметре pSecurityDescriptor в MQCreateQueue. Однако вы не можете изменить значения по умолчанию, поскольку они жестко запрограммированы."

Приветствую, Джон Брейквелл (бывший MSFT)

person John Breakwell    schedule 21.05.2010
comment
Интересный. На самом деле мы устанавливаем наши собственные разрешения для очереди в некотором более старом коде, где наш код создает очередь. Однако прямо сейчас проблема в том, что мы позволяем NServiceBus создавать для нас очередь, и я не могу найти способ заставить его создавать очереди с разрешениями, отличными от настроек NServiceBus по умолчанию. Я начинаю склоняться к тому, чтобы убедиться, что очередь существует с правильными разрешениями, прежде чем мы начнем пытаться использовать ее с NServiceBus. - person Amy T; 21.05.2010
comment
Да, это определенно тот подход, который вам нужен. Разрешение NServiceBus создавать очереди автоматически для вас - это то, что можно использовать для разработки в некоторых случаях, но, вероятно, никогда не для развертывания в производственной среде. Ознакомьтесь с: [stackoverflow.com/questions/4810164/ - person Adam; 01.09.2011

сменить владельца очереди, это единственное, что у меня сработало в подобной ситуации

person Allen    schedule 21.05.2010
comment
Вы имеете в виду, что мы должны делать это программно, изменив способ использования NServiceBus или вручную? - person Amy T; 21.05.2010

Чтобы полностью владеть созданием очереди MSMQ, вы можете отключить установщики, а затем обработать самостоятельное создание очередей

person Simon    schedule 02.06.2016