1

次のコードを使用して、自分のマシンでローカル キューをクエリしようとしています。

var c = new MessageQueueCriteria();
c.MachineName = Environment.MachineName;
var queues = MessageQueue.GetMessageQueueEnumerator(c);

しかし、コードは 2 行目で次のような例外をスローします。

ワークグループ インストールのコンピューターは、この操作をサポートしていません。

スタック トレース: System.Messaging.MessageQueue.GetMachineId (文字列 machineName) で System.Messaging.MessageQueueCriteria.set_MachineName (文字列値)

MessageQueueErrorCode 列挙型は System.Messaging.MessageQueueErrorCode.UnsupportedOperation に設定されます。

奇妙なことに、私はワークグループではなくドメインにいるのです! および他のアプリケーション(QueueExplorer)はファイルを動作しているようです。どうすればそれを回避できますか?

更新: プロパティのセッターにあるこのコードを実行するとエラーが発生するようですが、修正方法はわかりません。

new MessageQueuePermission(MessageQueuePermissionAccess.Browse, "*").Demand();
4

1 に答える 1

2

クラスMessageQueueCriteriaは、 GetPublicQueuesメソッドを使用するときにPUBLICメッセージ キューをフィルター処理するために使用されます。パブリック キューを参照できるようにするには、MSMQ Active Directory サービス統合機能を有効にする必要があります。コンピューターがドメインに参加している場合は十分ではありません。

ローカルのPRIVATEキューを参照する場合は、次を使用する必要があります。

MessageQueue[] queues = MessageQueue.GetPrivateQueuesByMachine(Environment.MachineName);
于 2012-05-16T09:23:13.853 に答える