使用 PHP 打开 MSMQ 队列


Using PHP to Open MSMQ Queues

我有一个示例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

确实有点难找到,但你可以在这里得到它,这不是一个可靠的来源,但我相信这是正确的。