L'accès au système de mise en file d'attente est refusé
j'essaie d'accéder au message de file d'attente de mon hôte, tout en essayant d'obtenir le message je reçois "L'accès au système de mise en file d'attente de messages est refusé." message. Ne sais pas comment résoudre ce problème. Je suis avec Windows 7 comme système client et le serveur Windows 2008 R2 Server
11 réponses
j'ai rencontré le même problème en essayant d'écrire au MSMQ ASP.NET (Windows 7). J'ai ajouté les permissions" Receive Message "" Peek Message "et" Send Message " et cela fonctionne correctement maintenant. Si tu fais ça ASP.NET vous êtes probablement sur le compte IIS_IUSRS.
Si vous essayez de lire un message d'une file d'attente distante alors autorisations est le principal coupable, que kprobst mentionné.
vous pouvez aussi obtenir d'autres causes:
dans mon cas, les files D'attente MSMQ étaient détenues par mon propre compte D'utilisateur Windows (administrateur local), car elles avaient été créées à partir d'une application console depuis Visual Studio en mode administrateur.
My web-app fonctionne comme NETWORK SERVICE
, qui a engendré le
l'accès au système de mise en file d'attente des messages est refusé
erreur.
j'ai corrigé cela en donnant NETWORK SERVICE
contrôle:
gestion des ordinateurs > Services et Applications > Message Queuing > Private Qeues > cliquez-Droit sur la file d'attente > Propriétés > Sécurité
Redémarrer le service MSMQ et IIS:
NET STOP MSMQ
NET START MSMQ
IISRESET
Server 2008:
Contrôle
Panel->Administration Tools->Computer Management
.Computer Management->Services and Applications->Message Queuing->Private Queues
.- Clic Droit
[UrQueueName] -> Properties -> Security
- mettez tout le monde sous contrôle total
- Réglez la connexion anonyme au contrôle total.
- Informatique
Management -> Services
- redémarrez le service de mise en file d'attente.
Sous Windows 7 (Client):
Créer une file D'attente de messages Rc avec FormatName:DIRECT=OS:MachineName\private$\UrQueueName
Exemple:
rcmq = new System.Messaging.MessageQueue(string.Format("FormatName:DIRECT=OS:{0}\private$\{1}", rcMachineName,rcQueueName));
il y a plusieurs raisons à cette erreur. L'un, cela pourrait être la sécurité. Vous devez vous assurer que le compte sous lequel votre application est en cours d'exécution a un accès en lecture/écriture à la file d'attente (ou un niveau de permission aussi élevé que vous avez besoin).
Deuxièmement, assurez-vous que si la file d'attente est transactionnel, vous utilisez le bon mode de transaction. Ou encore, si la file d'attente n'est pas transactionnelle, que vous ne tentez pas de passer un mode de transaction à elle lorsque vous lisez ou écrire.
pour nous, c'est parce qu'un programme de test a créé la file d'attente...
Solution: supprimez la file d'attente et laissez-La être recréée par les bons processus fonctionnant sous les bonnes références.
cela pourrait devenir un problème frustrant. Dans mon scénario, l'exception a été levée sur BeginReceive (). J'avais une file d'attente de messages existante qui a été créée par un .Net 2.0 application et j'essayais de l'utiliser dans une autre application qui fonctionnait sur .Net 4.0. La solution était de supprimer le MSMQ (situé à C:\Windows\System32\msmq\storage\lqs ), et le recréer avec .Net 4.0.
dans notre cas, changer l'identité du Pool D'applications du service web qui invoque le Peek MSMQ a aidé avec ce problème qui a commencé à se produire après une migration de serveur.
nous avons dû changer L'identité de L'application Pool de "ApplicationPoolIdentity"à " NetworkService". Il a travaillé par la suite.
Cela a fonctionné pour nous: Gestionnaire de serveur - > fonctions - > Mise en file D'attente des messages - > clic droit - > Propriétés - > Sécurité du serveur
décocher: "Désactiver le non-authentifiés d'appels RPC"
grâce à ce post, j'ai pu supprimer le problème "Accès refusé" : https://codifying.wordpress.com/2012/04/16/msmq-solving-access-denied-errors-for-private-queues/
Le problème original
... est frustrant, la file d'attente est listée dans la gestion du serveur sous les Files D'attente privées, mais je n'avais pas la possibilité de :
- Delete => Permission denied
- modifier la permission de sécurité => Permission denied
- consulter les autres messages dans la file d'attente => Permission denied
la solution
- Créer une file d'attente manuellement (utilisé plus tard), nous allons l'appeler FA1
- Fermer Services: Message Queuing (+Adaptateur Écouteur Pour Net.Msmq)
- Ensuite, allez à System32/msmq/stockage/lqs
- trouver le dernier fichier pour FA1 (vérifier si c'est le bon fichier, chaque fichier ici peut être ouvert avec notepad) et ensuite copier la valeur de L'attribut Security
- trouver le fichier associé à la file d'attente d'édition, le coller la valeur copiée dans l'étape précédente
- supprimer le fichier associé à FA1
- ouvrir les deux services précédemment fermés
- Aller dans le Gestionnaire de Serveur
le message d'erreur ne doit plus apparaître
Mais... vous pourriez avoir un autre problème avec votre logiciel en essayant de Lire / Se connecter à cette file d'attente, il se plaindra qu'il n'a pas assez de privilèges, donc la dernière étape est d'aller aux propriétés avancées de cette file d'attente et de définir le plein accès de contrôle à tout le monde (bien, peut-être que vous allez spécifier un utilisateur spécifique, mais c'est ce que j'ai fait pour m'assurer que je ne suis pas bloqué sur mon propre serveur dev).
veuillez vous connecter à votre gestionnaire de sever et vérifier vos propriétés de file d'attente de messages qui ont assigné "envoyer message" , "message de peek" et d'autres privilèges requis à L'utilisateur IIS ou à tout le monde ..