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
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.
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:
Contrôle Panel->Administration Tools->Computer Management
.
Dans Computer Management->Services and Applications->Message Queuing->Private Queues
.
[UrQueueName] -> Properties -> Security
Management -> Services
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));
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
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 /
... 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:
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).
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.
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.
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"
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.
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.