ホストからキューメッセージにアクセスしようとしていますが、「メッセージキューシステムへのアクセスが拒否されました」というメッセージを取得しようとしています。メッセージ。この問題を解決する方法がわかりません。クライアントシステムとしてWindows 7を使用しており、サーバーはWindows 2008 R2サーバーです
ASP.NET(Windows 7)を介してMSMQに書き込もうとすると、同じ問題が発生しました。 「メッセージの受信」、「メッセージのピーク」、および「メッセージの送信」権限を追加しましたが、現在は正常に機能しています。 ASP.NETを介してこれを実行している場合、おそらくIIS_IUSRSアカウントの下にいます。
私の場合、MSMQキューは、管理者モードでVisual Studioからコンソールアプリを実行して作成されたため、自分のWindowsユーザーアカウント(ローカル管理者)が所有していました。
私のWebアプリはNETWORK SERVICE
として実行され、
メッセージキューシステムへのアクセスが拒否されました
エラー。
NETWORK SERVICE
フルコントロールを与えることでこれを修正しました。
[コンピューターの管理]> [サービスとアプリケーション]> [メッセージキュー]> [プライベートキュー]> 右クリックキュー> [プロパティ]> [セキュリティ]
MSMQサービスとIISを再起動します。
NET STOP MSMQ
NET START MSMQ
IISRESET
Server2008:
Panel->Administration Tools->Computer Management
を制御します。
Computer Management->Services and Applications->Message Queuing->Private Queues
で。
[UrQueueName] -> Properties -> Security
[.____]を右クリックします。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));
この投稿のおかげで、「アクセス拒否」問題を削除できました。 https://codifying.wordpress.com/2012/04/16/msmq-solving-access-denied-errors-for -private-queues /
...イライラする、キューはサーバー管理のプライベートキューの下にリストされていますが、私はする可能性がありませんでした:
エラーメッセージは表示されなくなります
しかし...そのキューへの読み取り/接続を試みている間にソフトウェアに別の問題が発生する可能性があり、十分な権限がないと文句を言うので、最後のステップはそのキューの高度なプロパティに移動し、完全な全員へのアクセスを制御します(まあ、特定のユーザーを指定するかもしれませんが、それは私自身の開発サーバーでブロックされないようにするためにしたことです)。
このエラーには多くの理由があります。 1つは、セキュリティである可能性があります。アプリケーションを実行しているアカウントがキューへの読み取り/書き込みアクセス権を持っていることを確認する必要があります(または必要に応じて高いアクセス許可レベル)。
次に、キューがトランザクション対応の場合は、適切なトランザクションモードを使用していることを確認してください。または、キューがトランザクションではない場合、読み取りまたは書き込み時にトランザクションモードをキューに渡そうとはしません。
私たちにとっては、テストプログラムがキューを作成したためです...
解決策:キューを削除し、適切な資格情報で実行されている適切なプロセスによってキューを再作成します。
これは、サーバーマネージャー->機能->メッセージキュー->右クリック->プロパティ->サーバーセキュリティ
チェック解除:「認証されていないRPC呼び出しを無効にする」
このケースでは、Peek MSMQを呼び出すWebサービスのアプリケーションプールのIDを変更すると、サーバーの移行後に発生し始めたこの問題に役立ちました。
アプリケーションプールIDを「ApplicationPoolIdentity」から「NetworkService」に変更する必要がありました。それはその後働きました。
これはイライラする問題になる可能性があります。私のシナリオでは、例外はBeginReceive()でスローされました。 。Net 2.アプリケーションによって作成された既存のメッセージキューがあり、。Net 4.で実行されている別のアプリケーションで使用しようとしていました。解決策は、MSMQ(C:\ Windows\System32\msmq\storage\lqsにある)を削除し、.Net 4.0で再作成することでした。