4

我有一个示例 php 脚本来连接到 Windows 上的 MSMQ。我可以创建队列并向队列发送消息,但是当我尝试打开队列以读取消息时,我不断收到拒绝访问异常。代码在这里: http: //pastebin.com/S5uCiP2Z

我认为主要问题是

$READ = $MSMQInfo->Open(2,0);

行,因为我不确定 2、0 选项代表什么(我在任何地方都找不到对这些选项的引用 - 我从另一个示例中获得了该代码。)查看http://msdn.microsoft 上的 MSMQQueueInfo.open 文档。 com/en-us/library/windows/desktop/ms707027%28v=vs.85%29.aspx我可以看到一些选项,但看不到任何数字选项..

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

谢谢

4

1 回答 1

3

这里,您已经知道参数是:

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:默认值。该队列可供所有人组的所有成员使用。如果 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

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

于 2012-05-01T16:27:48.870 回答