msmq - read - Se niega el acceso al sistema Message Queue Server
read message queue c# (11)
Estoy tratando de acceder al mensaje de cola de mi host, mientras trato de recibir el mensaje me aparece "Se niega el acceso al sistema Message Queue Server". mensaje. No sé cómo resolver este problema. Estoy usando Windows 7 como sistema cliente y el servidor es Windows 2008 R2 Server
En mi caso, las colas de MSMQ eran propiedad de mi propia cuenta de usuario de Windows (administrador local), ya que se habían creado al ejecutar una aplicación de consola desde Visual Studio en modo de administrador.
Mi aplicación web se ejecuta como NETWORK SERVICE
, que generó
Se niega el acceso al sistema Message Queue Server
error.
Lo solucioné al brindarle a NETWORK SERVICE
el control total:
Administración de equipos> Servicios y aplicaciones> Cola de mensajes> Qeues privados> Cola de clic derecho > Propiedades> Seguridad
Reinicie el servicio MSMQ y IIS:
NET STOP MSMQ
NET START MSMQ
IISRESET
En nuestro caso, cambiar la Identidad del conjunto de aplicaciones del servicio web que invoca el Peek MSMQ ayudó con este problema que comenzó a suceder después de una migración del servidor.
Tuvimos que cambiar la Identidad del conjunto de aplicaciones de "ApplicationPoolIdentity" a "NetworkService". Funcionó después.
Esto funcionó para nosotros: Administrador del servidor -> Funciones -> Message Queuing -> Right Click -> Propiedades -> Seguridad del servidor
Desmarcar: "Desactivar llamadas RPC no autenticadas"
Esto podría convertirse en un problema frustrante. En mi caso, la excepción se lanzó en BeginReceive () . Tenía una cola de mensajes existente que fue creada por una aplicación .Net 2.0 e intentaba usarla en otra aplicación que se ejecutaba en .Net 4.0 . La solución fue eliminar el MSMQ (ubicado en C: / Windows / System32 / msmq / storage / lqs) y recrearlo con .Net 4.0.
Gracias a esta publicación, pude eliminar el problema de "Acceso denegado": https://codifying.wordpress.com/2012/04/16/msmq-solving-access-denied-errors-for-private-queues/
El problema original
... es frustrante, la cola aparece en la Gestión del servidor en Colas privadas, pero no tuve la posibilidad de:
- Eliminar => Permiso denegado
- Editar permiso de seguridad => Permiso denegado
- Ver el mensaje restante en la cola => Permiso denegado
La solución
- Crea una cola manualmente (se usa más adelante), llamémosla FA1
- Cerrar servicios: Message Queue Server (+ adaptador de escucha para Net.Msmq)
- Luego vaya a System32 / msmq / storage / lqs
- Busque el archivo más reciente para FA1 (compruebe si es el archivo correcto, todos los archivos aquí se pueden abrir con el bloc de notas) y luego copie el valor del atributo Seguridad
- Busque el archivo asociado a la cola de problemas y péguelo en el valor copiado en el paso anterior
- Eliminar el archivo asociado con FA1
- Abra los dos servicios previamente cerrados
- Ir al Administrador del servidor
El mensaje de error ya no debería aparecer
Pero ... es posible que tenga otro problema con su software al intentar leer / conectarse a esa cola, se quejará de que no tiene suficientes privilegios, por lo que el último paso es ir a las propiedades avanzadas de esa cola y establecer el completo controlar el acceso a todos (bueno, tal vez especifiques un usuario específico, pero eso es lo que hice para asegurarme de que no me bloqueen en mi propio servidor de desarrollo).
Hay muchas razones para este error. Uno, podría ser seguridad. Debe asegurarse de que la cuenta en la que se ejecuta su aplicación tenga acceso de lectura / escritura a la cola (o un nivel de permisos tan alto como lo necesite).
Segundo, asegúrese de que si la cola es transaccional, está utilizando el modo de transacción correcto para ella. O, alternativamente, si la cola no es transaccional, no está intentando pasarle un modo de transacción cuando lee o escribe.
Inicie sesión en su administrador de servidores y revise las propiedades de la cola de mensajes que tienen asignados "enviar mensaje", "mensaje de vista previa" y otros privilegios necesarios para el usuario de IIS o para todos.
Me encontré con el mismo problema al tratar de escribir en el MSMQ a través de ASP.NET (Windows 7). Agregué los permisos de "Recibir mensaje" "Consultar mensaje" y "Enviar mensaje" y funciona correctamente ahora. Si está ejecutando esto a través de ASP.NET, entonces probablemente esté bajo la cuenta IIS_IUSRS.
Para nosotros, fue porque un programa de prueba creó la cola ...
Solución: elimine la cola y permita que sea recreada por los procesos correctos que se ejecutan con las credenciales correctas.
Server2008:
Panel->Administration Tools->Computer Management
control-Panel->Administration Tools->Computer Management
.En
Computer Management->Services and Applications->Message Queuing->Private Queues
.- Haga clic derecho en
[UrQueueName] -> Properties -> Security
- Pon a todos en control total
- Establezca el INICIO DE SESIÓN ANÓNIMO en Control total.
- En Computer
Management -> Services
- Reinicie el servicio Message Queue Server.
En Windows 7 (Cliente): Crear cola de mensajes Rc con FormatName:DIRECT=OS:MachineName/private$/UrQueueName
Ejemplo:
rcmq = new System.Messaging.MessageQueue(string.Format("FormatName:DIRECT=OS:{0}//private$//{1}", rcMachineName,rcQueueName));
Si está intentando leer un mensaje de una cola remota, entonces los permisos son los principales culpables, como se menciona en kprobst.
También puede obtener otras causas: