我有一个示例php脚本来连接到Windows上的MSMQ。我可以创建队列并将消息发送到队列,但是当我尝试打开队列以读取消息时,我不断收到拒绝访问异常。代码在这里:http://pastebin.com/S5uCiP2Z
我认为主要问题是
$READ = $MSMQInfo->Open(2,0);
行,因为我不确定 2, 0 选项代表什么(我在任何地方都找不到对这些选项的引用 - 我从另一个示例中获得了该代码。查看 MSMQQueueInfo.http://msdn.microsoft.com/en-us/library/windows/desktop/ms707027%28v=vs.85%29.aspx open 的文档,我可以看到一些选项,但看不到任何数字选项。
任何帮助将不胜感激。与 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;
第二个参数,共享模式:
共享模式指定谁可以访问队列。设置为以下选项之一:
MQ_DENY_NONE:默认。该队列可供"所有人"组的所有成员使用。如果 Access 设置为 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
它确实有点难找到,但你可以在这里得到它,这不是一个可靠的来源,但我相信这是正确的。