使用PHP打开MSMQ队列

使用PHP打开MSMQ队列,php,msmq,Php,Msmq,我有一个示例php脚本可以连接到windows上的MSMQ。我可以创建队列并向队列发送消息,但是,当我尝试打开队列来读取消息时,总是会出现访问被拒绝异常。代码如下: 我认为主要的问题是 $READ = $MSMQInfo->Open(2,0); 行,因为我不确定2,0选项代表什么(我找不到任何地方的参考-我从另一个示例中获得了该代码)。查看MSMQQueueInfo.open at的文档,我可以看到一些选项,但没有任何数字选项 任何帮助都将不胜感激。与MSMQ集成的原因是在系统之间移动

我有一个示例php脚本可以连接到windows上的MSMQ。我可以创建队列并向队列发送消息,但是,当我尝试打开队列来读取消息时,总是会出现访问被拒绝异常。代码如下:

我认为主要的问题是

$READ = $MSMQInfo->Open(2,0);
行,因为我不确定2,0选项代表什么(我找不到任何地方的参考-我从另一个示例中获得了该代码)。查看MSMQQueueInfo.open at的文档,我可以看到一些选项,但没有任何数字选项

任何帮助都将不胜感激。与MSMQ集成的原因是在系统之间移动时提供临时解决方案,我们的旧系统使用MSMQ,因此我需要有此接口

谢谢,您已经知道参数是:

Function Open(Access, ShareMode)
他们还说

访问权限可以设置为以下选项之一:

MQ_PEEK_访问:只能查看消息。无法将它们从队列中删除

MQ_发送_访问:消息只能发送到队列

MQ_RECEIVE_ACCESS:可以从队列中检索(读取和删除)消息、查看或清除消息。有关限制谁可以从队列检索消息的信息,请参阅ShareMode参数的说明

MQ_PEEK_ACCESS | MQ_ADMIN_ACCESS:只能查看本地传出队列中的消息(读取而不从队列中删除)

MQ_RECEIVE_ACCESS | MQ_ADMIN_ACCESS:可以检索(读取并从队列中删除)、窥视(读取而不从队列中删除)或清除(删除)本地传出队列中的消息

在MSDN的文档中,他们为您提供常数的数值:

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_违规(0xC00E0009)错误。仅当Access设置为MQ_RECEIVE_Access时适用

这些常数是:

Const MQ_DENY_NONE = 0
Const MQ_DENY_RECEIVE_SHARE = 1

这确实有点难找到,但您可以获取它,例如,它不是一个可靠的来源,但我相信它是正确的。

我现在可以读取队列中的第一条消息,谢谢:)不,只需通过receive()迭代来获取每条消息