Создание MSMQ программно с использованием .NET - PullRequest
3 голосов
/ 31 января 2011

работает на компьютере с Win 2008 R2.

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

мой код выглядит так:

Try
    Dim Q As MessageQueue = MessageQueue.Create(QueueName)
    Console.WriteLine("Queue created successfully")

    ' Create an AccessControlList.
    Dim list As New AccessControlList()

    'Add the AccessControlEntry to the AccessControlList.
    list.Add(New AccessControlEntry(New Trustee("Everyone"), GenericAccessRights.All, StandardAccessRights.All, AccessControlEntryType.Allow))
    'Add the AccessControlEntry to the AccessControlList.
    list.Add(New AccessControlEntry(New Trustee("ANONYMOUS LOGON"), GenericAccessRights.All, StandardAccessRights.All, AccessControlEntryType.Allow))

    ' Apply the AccessControlList to the queue.
      Q.SetPermissions(list)

Catch ex As Exception
    Console.WriteLine(String.Format("Unable to create queue {1}. {0}", ex, QueueName))

End Try

при запускеэто с именем очереди, как ". \ Private $ \ QueueName", очередь создается успешно, и если я смотрю на разрешения для очереди, все выглядит ОК (все и анонимные имеют полный доступ к очереди).проблема в том, что разрешения кажутся нормальными, но это не так.когда анонимный пользователь пытается отправить (или прочитать) сообщение в очередь, он получает сообщение об отказе в доступе.если в очереди разрешений я удаляю все и анонимные разрешения и воссоздаю их, то внезапно все работает, как ожидалось, и клиент может отправлять сообщения.

, чтобы дополнительно доказать, что есть какая-то проблема: если я смотрю напапка C: \ Windows \ Sysnative \ MSMQ \ хранение \ коды LQ \ о содержании в очереди устанавливающих файлов я вижу эти разрешения

1011 * Security = 010007806800000084000000000000001400000002005400030000000000140024001f100101000000000001000000000000140004001f10010100000000000507000000000024003f000f0001050000000000051500000097fd4a8271ec5457708be3d5f401000001050000000000051500000097fd4a8271ec5457708be3d5f401000001050000000000051500000097fd4a8271ec5457708be3d501020000 1013 * и после удаления и повторного созданияразрешения я получаю эти параметры безопасности:

Безопасность = 010007806800000084000000000000000000000000540003000000005400030000000024003f000f0001050000000000051500000097fd4a8271ec5457708be3d5f40100000000140000000000000000000000000000000000000000000000000000000000000f0001010000000000010000000001050000000000051500000097fd4a8271ec5457708be3d5f401000001050000000000051500000097fd4a8271ec5457708be3d501020000

1017 * на каждой очереди, созданной с использованием кода выше настройки безопасности, как в первой строке безопасности, прежде чем я вновь создать установку и как 2-й линии безопасности после. 1019 * что я здесь отсутствует?

PS Вы можете прочитать некоторый анализ этого токена безопасности, сделанный бывшим сотрудником MSFT, на посте на форуме MS, который я сделал на эту тему http://social.msdn.microsoft.com/Forums/en-US/msmq/thread/2f87fe8a-c452-432a-815d-05eeaf455514/

1 Ответ

1 голос
/ 09 февраля 2011

Вы смотрели на класс System.Messaging.MessageQueueInstaller?Он вызывается установщиком.По сути, вы устанавливаете для него набор свойств (имя очереди, разрешения, если он транзакционный, журнал включен и т. Д.), А затем позволяете ему выполнять всю работу.Поскольку он уже построен, вы можете попробовать этот маршрут.

...