web-dev-qa-db-fra.com

L'accès au système Message Queuing est refusé

J'essaie d'accéder au message de file d'attente à partir de mon hôte, tout en essayant d'obtenir le message, j'obtiens "L'accès au système Message Queuing est refusé." message. Je ne sais pas comment résoudre ce problème. J'utilise Windows 7 comme système client et le serveur est Windows 2008 R2 Server

43
pravakar

J'ai rencontré le même problème en essayant d'écrire sur le MSMQ via ASP.NET (Windows 7). J'ai ajouté les autorisations "Recevoir un message" "Peek Message" et "Envoyer un message" et cela fonctionne correctement maintenant. Si vous exécutez cela via ASP.NET, vous êtes probablement sous le compte IIS_IUSRS.

25
Glade Mellor

Dans mon cas, les files d'attente MSMQ appartenaient à mon propre compte d'utilisateur Windows (administrateur local), car elles avaient été créées à partir de l'exécution d'une application console à partir de Visual Studio en mode administrateur.

Mon application Web s'exécute en tant que NETWORK SERVICE, qui a engendré la

L'accès au système Message Queuing est refusé

erreur.

J'ai corrigé cela en donnant NETWORK SERVICE controle total:

Gestion de l'ordinateur> Services et applications> Message Queuing> Files d'attente privées> File d'attente de clic droit> Propriétés> Sécurité

Redémarrez le service MSMQ et IIS:

NET STOP MSMQ
NET START MSMQ
IISRESET

Server2008:

  1. Contrôle Panel->Administration Tools->Computer Management.

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

  3. Clic-droit [UrQueueName] -> Properties -> Security
    • Réglez tout le monde sur un contrôle total
    • Réglez ANONYMOUS LOGON sur Full Control.
  4. Dans l'ordinateur Management -> Services
    • Redémarrez le service Message Queuing.

Sous Windows 7 (client): créez 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)); 
7
Harvard Chan

Si vous essayez de lire un message à partir d'une file d'attente distante, les autorisations sont le principal coupable, comme l'a mentionné kprobst.

Vous pouvez également obtenir d'autres causes:

Impossible de lire à partir des files d'attente MSMQ distantes

7
John Breakwell

Grâce à ce message, j'ai pu supprimer le problème "Accès refusé": https://codifying.wordpress.com/2012/04/16/msmq-solving-access-denied-errors-for -des files d'attente privées /

Le problème d'origine

... est frustrant, la file d'attente est répertoriée dans la gestion du serveur sous Files d'attente privées, mais je n'avais pas la possibilité de:

  • Supprimer => Autorisation refusée
  • Modifier l'autorisation de sécurité => Autorisation refusée
  • Afficher le message restant dans la file d'attente => Autorisation refusée

La solution

  1. Créez une file d'attente manuellement (utilisée plus tard), appelons-la FA1
  2. Fermer les services: Message Queuing (+ adaptateur d'écouteur pour Net.Msmq)
  3. Ensuite, accédez à System32/msmq/storage/lqs
  4. Trouvez le dernier fichier pour FA1 (vérifiez s'il s'agit du bon fichier, chaque fichier ici peut être ouvert avec le bloc-notes), puis copiez la valeur de l'attribut Sécurité
  5. Recherchez le fichier associé à la file d'attente des problèmes, collez-lui la valeur copiée à l'étape précédente
  6. Supprimer le fichier associé à FA1
  7. Ouvrez les deux services précédemment fermés
  8. Accédez au Gestionnaire de serveur

Le message d'erreur ne devrait 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 consiste à accéder aux propriétés avancées de cette file d'attente et à définir la pleine contrôler l'accès à tout le monde (enfin, vous pouvez 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 de développement).

4
Micaël Félix

Il y a plusieurs raisons à cette erreur. Premièrement, cela pourrait être la sécurité. Vous devez vous assurer que le compte sous lequel votre application s'exécute dispose d'un accès en lecture/écriture à la file d'attente (ou à un niveau d'autorisation aussi élevé que nécessaire).

Deuxièmement, assurez-vous que si la file d'attente est transactionnelle, vous utilisez le mode de transaction approprié. Ou bien, si la file d'attente n'est pas transactionnelle, que vous n'essayez pas de lui passer un mode de transaction lorsque vous lisez ou écrivez.

4
kprobst

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 s'exécutant sous les bonnes informations d'identification.

2
Cine

Cela a fonctionné pour nous: Gestionnaire de serveur -> Fonctionnalités -> Message Queuing -> Clic droit -> Propriétés -> Sécurité du serveur

Décochez: "Désactiver les appels RPC non authentifiés"

1
saille

Dans notre cas, la modification de l'identité du pool d'applications du service Web qui appelle Peek MSMQ a aidé à résoudre ce problème qui a commencé à se produire après une migration de serveur.

Nous avons dû changer l'identité du pool d'applications de "ApplicationPoolIdentity" en "NetworkService". Cela a fonctionné par la suite.

0
FMFF

Cela pourrait devenir un problème frustrant. Dans mon scénario, l'exception a été levée BeginReceive (). J'avais une file d'attente de messages existante créée par une application . Net 2. et j'essayais de l'utiliser dans une autre application qui s'exécutait sur . Net 4.. La solution consistait à supprimer le MSMQ (situé dans C:\Windows\System32\msmq\storage\lqs) et à le recréer avec .Net 4.0.

0
Houman