Использование PHP для открытия очередей MSMQ

У меня есть пример php-скрипта для подключения к MSMQ на окнах. Я могу создавать очереди и отправлять сообщения в очереди, однако, когда я пытаюсь открыть очередь, чтобы читать сообщения, я продолжаю получать исключение Access denied. код находится здесь: http://pastebin.com/S5uCiP2Z

Я считаю, что главная проблема заключается в том, что

$READ = $MSMQInfo->Open(2,0); 

как я не уверен, что стоят варианты 2, 0 (я не могу найти ссылку на те, где есть – я получил этот код из другого примера.) Глядя на документы для MSMQQueueInfo.open на http://msdn.microsoft. com / en-us / library / windows / desktop / ms707027% 28v = vs.85% 29.aspx Я могу видеть несколько вариантов, но не любые числовые параметры.

Любая помощь будет очень оценена. Причиной интеграции с MSMQ является предоставление промежуточного решения при переходе между системами, наша старая система использует MSMQ, поэтому мне нужен этот интерфейс.

благодаря

Отсюда вы уже знаете параметры:

 Function Open(Access, ShareMode) 

и они также говорят, что

Доступ может быть установлен в одно из следующих:

MQ_PEEK_ACCESS: Сообщения можно просматривать только. Они не могут быть удалены из очереди.

MQ_SEND_ACCESS: сообщения могут быть отправлены только в очередь.

MQ_RECEIVE_ACCESS: сообщения могут быть извлечены (прочитаны и удалены) из очереди, заглянули или очищены. См. Описание аргумента ShareMode для получения информации о том, кто может получать сообщения из очереди.

MQ_PEEK_ACCESS | MQ_ADMIN_ACCESS: Сообщения в локальной исходящей очереди могут быть просмотрены только (чтение без удаления из очереди).

MQ_RECEIVE_ACCESS | MQ_ADMIN_ACCESS: Сообщения в локальной исходящей очереди могут быть восстановлены (прочитаны и удалены из очереди), заглянули в (чтение без удаления из очереди) или очищено (удалено).

В документах MSDN для MQACCESS они дают числовые значения для констант:

 typedef enum { MQ_RECEIVE_ACCESS = 1, MQ_SEND_ACCESS = 2, MQ_PEEK_ACCESS = 0x0020, MQ_ADMIN_ACCESS = 0x0080 } MQACCESS; 

Второй параметр, ShareMode:

ShareMode указывает, кто может получить доступ к очереди. Установите одно из следующих значений:

MQ_DENY_NONE: значение по умолчанию. Очередь доступна всем членам группы «Все». Этот параметр должен использоваться, если для параметра Доступ установлено значение MQ_PEEK_ACCESS или MQ_SEND_ACCESS.

MQ_DENY_RECEIVE_SHARE: Ограничивает тех, кто может получать сообщения из очереди в этот процесс. Если очередь уже открыта для извлечения сообщений другим процессом, этот вызов завершается с ошибкой и генерируется ошибка MQ_ERROR_SHARING_VIOLATION (0xC00E0009). Применимо, только если для параметра Доступ установлено значение MQ_RECEIVE_ACCESS.

Этими константами являются:

 Const MQ_DENY_NONE = 0 Const MQ_DENY_RECEIVE_SHARE = 1 

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