2012-05-01 83 views
4

我有一個示例PHP腳本連接到MSMQ在Windows上。我可以創建隊列並將消息發送到隊列,但是當我嘗試打開隊列來讀取消息時,我一直在收到拒絕訪問的異常。該代碼是在這裏: http://pastebin.com/S5uCiP2Z使用PHP打開MSMQ隊列

我認爲主要的問題是

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

行,因爲我不能確定2個,0個選項代表(我無法找到那些任何地方的參考 - 我)看看MSMQQueueInfo.open的文檔http://msdn.microsoft.com/en-us/library/windows/desktop/ms707027%28v=vs.85%29.aspx我可以看到幾個選項,但沒有任何數字選項。

任何幫助將得到廣泛讚賞。與MSMQ集成的原因是在系統之間移動時提供臨時解決方案,我們的舊系統使用MSMQ,因此我需要具有此接口。

感謝

回答

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,這是沒有太大的可靠的來源,但我相信這是正確的。

+0

我現在可以讀取隊列中的第一條消息,謝謝:)不只是遍歷receive()來獲取每條消息 – 4razmus