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