我有一个示例php脚本可以连接到Windows上的MSMQ。我可以创建队列并向队列发送消息,但是当我尝试打开队列来读取消息时,我不断获得访问被拒绝的异常。代码在这里: http://pastebin.com/S5uCiP2Z
我认为主要问题是
$READ = $MSMQInfo->Open(2,0);
行,因为我不确定2,0选项代表什么(我找不到任何地方的引用 - 我从另一个例子中获得了该代码。)在http://msdn.microsoft.com/en-us/library/windows/desktop/ms707027%28v=vs.85%29.aspx查看MSMQQueueInfo.open的文档我可以看到一些选项,但没有任何数字选项..
任何帮助都会受到极大的赞赏。与MSMQ集成的原因是在系统之间移动时提供临时解决方案,我们的旧系统使用MSMQ,因此我需要有这个接口。
由于
答案 0 :(得分:3)
从here开始,您已经知道参数是:
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:默认。该队列可供Everyone组的所有成员使用。如果Access设置为MQ_PEEK_ACCESS或MQ_SEND_ACCESS,则必须使用此设置。
MQ_DENY_RECEIVE_SHARE:限制可以将队列中的消息检索到此进程的人员。如果已打开队列以通过其他进程检索消息,则此调用将失败并生成MQ_ERROR_SHARING_VIOLATION(0xC00E0009)错误。仅当Access设置为MQ_RECEIVE_ACCESS时才适用。
这些常数是:
Const MQ_DENY_NONE = 0
Const MQ_DENY_RECEIVE_SHARE = 1
确实有点难以找到,但你可以得到它,例如here,这不是一个可靠的来源,但我相信这是正确的。