4

Windows で MSMQ に接続するためのサンプル php スクリプトがあります。キューを作成してキューにメッセージを送信できますが、キューを開いてメッセージを読み取ろうとすると、アクセス拒否の例外が発生し続けます。コードはこちら: http://pastebin.com/S5uCiP2Z

私が思う一番の問題は、

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

2, 0 オプションが何を表しているのかわからないので (どこにも参照が見つかりません - 別の例からそのコードを取得しました) 。 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;

2 番目のパラメーター、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

確かに見つけるのは少し難しいですが、たとえばここで入手できますが、これはあまり信頼できる情報源ではありませんが、正しいと思います.

于 2012-05-01T16:27:48.870 に答える