web-dev-qa-db-ja.com

メッセージキューシステムへのアクセスが拒否されました

ホストからキューメッセージにアクセスしようとしていますが、「メッセージキューシステムへのアクセスが拒否されました」というメッセージを取得しようとしています。メッセージ。この問題を解決する方法がわかりません。クライアントシステムとしてWindows 7を使用しており、サーバーはWindows 2008 R2サーバーです

43
pravakar

ASP.NET(Windows 7)を介してMSMQに書き込もうとすると、同じ問題が発生しました。 「メッセージの受信」、「メッセージのピーク」、および「メッセージの送信」権限を追加しましたが、現在は正常に機能しています。 ASP.NETを介してこれを実行している場合、おそらくIIS_IUSRSアカウントの下にいます。

25
Glade Mellor

私の場合、MSMQキューは、管理者モードでVisual Studioからコンソールアプリを実行して作成されたため、自分のWindowsユーザーアカウント(ローカル管理者)が所有していました。

私のWebアプリはNETWORK SERVICEとして実行され、

メッセージキューシステムへのアクセスが拒否されました

エラー。

NETWORK SERVICEフルコントロールを与えることでこれを修正しました。

[コンピューターの管理]> [サービスとアプリケーション]> [メッセージキュー]> [プライベートキュー]> 右クリックキュー> [プロパティ]> [セキュリティ]

MSMQサービスとIISを再起動します。

NET STOP MSMQ
NET START MSMQ
IISRESET

Server2008:

  1. Panel->Administration Tools->Computer Managementを制御します。

  2. Computer Management->Services and Applications->Message Queuing->Private Queuesで。

  3. [UrQueueName] -> Properties -> Security [.____]を右クリックします。
    • 全員をフルコントロールに設定する
    • ANONYMOUS LOGONをフルコントロールに設定します。
  4. コンピューターManagement -> Services
    • メッセージキューサービスを再起動します。

Windows 7(クライアント)の場合:FormatName:DIRECT=OS:MachineName\private$\UrQueueNameを使用してRcメッセージキューを作成します

例:

rcmq = new System.Messaging.MessageQueue(string.Format("FormatName:DIRECT=OS:{0}\\private$\\{1}", rcMachineName,rcQueueName)); 
7
Harvard Chan

Kprobstが述べたように、リモートキューからメッセージを読み取ろうとする場合、権限が主な原因です。

他の原因も取得できます。

リモートMSMQキューからの読み取りの失敗

7
John Breakwell

この投稿のおかげで、「アクセス拒否」問題を削除できました。 https://codifying.wordpress.com/2012/04/16/msmq-solving-access-denied-errors-for -private-queues /

元の問題

...イライラする、キューはサーバー管理のプライベートキューの下にリストされていますが、私はする可能性がありませんでした:

  • 削除=>許可が拒否されました
  • セキュリティ許可の編集=>許可拒否
  • キュー内の残りのメッセージを表示=>許可が拒否されました

ソリューション

  1. キューを手動で作成します(後で使用します)。FA1と呼びましょう。
  2. サービスを閉じる:メッセージキュー(+ Net.Msmqのリスナーアダプター)
  3. 次に、System32/msmq/storage/lqsに移動します
  4. FA1の最新のファイルを探し(正しいファイルであるかどうかを確認し、ここにあるすべてのファイルをメモ帳で開くことができます)、属性Securityの値をコピーします
  5. 問題キューに関連付けられているファイルを見つけ、前の手順でコピーした値を貼り付けます
  6. FA1に関連付けられているファイルを削除します
  7. 以前に閉じた2つのサービスを開きます
  8. サーバーマネージャーに移動

エラーメッセージは表示されなくなります

しかし...そのキューへの読み取り/接続を試みている間にソフトウェアに別の問題が発生する可能性があり、十分な権限がないと文句を言うので、最後のステップはそのキューの高度なプロパティに移動し、完全な全員へのアクセスを制御します(まあ、特定のユーザーを指定するかもしれませんが、それは私自身の開発サーバーでブロックされないようにするためにしたことです)。

4
Micaël Félix

このエラーには多くの理由があります。 1つは、セキュリティである可能性があります。アプリケーションを実行しているアカウントがキューへの読み取り/書き込みアクセス権を持っていることを確認する必要があります(または必要に応じて高いアクセス許可レベル)。

次に、キューがトランザクション対応の場合は、適切なトランザクションモードを使用していることを確認してください。または、キューがトランザクションではない場合、読み取りまたは書き込み時にトランザクションモードをキューに渡そうとはしません。

4
kprobst

私たちにとっては、テストプログラムがキューを作成したためです...

解決策:キューを削除し、適切な資格情報で実行されている適切なプロセスによってキューを再作成します。

2
Cine

これは、サーバーマネージャー->機能->メッセージキュー->右クリック->プロパティ->サーバーセキュリティ

チェック解除:「認証されていないRPC呼び出しを無効にする」

1
saille

このケースでは、Peek MSMQを呼び出すWebサービスのアプリケーションプールのIDを変更すると、サーバーの移行後に発生し始めたこの問題に役立ちました。

アプリケーションプールIDを「ApplicationPoolIdentity」から「NetworkService」に変更する必要がありました。それはその後働きました。

0
FMFF

これはイライラする問題になる可能性があります。私のシナリオでは、例外はBeginReceive()でスローされました。 。Net 2.アプリケーションによって作成された既存のメッセージキューがあり、。Net 4.で実行されている別のアプリケーションで使用しようとしていました。解決策は、MSMQ(C:\ Windows\System32\msmq\storage\lqsにある)を削除し、.Net 4.0で再作成することでした。

0
Houman