¿ Un bug estableciendo las seguridad en las colas MSMQ ?

 Pues al menos tiene toda la pinta. Os cuento….


En un proyecto en el que estoy involucrado tengo un servicio WCF que está hosteado en un servicio Windows.El servicio windows corre con el usuario NetworkService ( con LocalSystem todo iba perfecto 🙂 ) y necesita acceder a unas colas MSMQ que previamente había creado.


Al instalar el servicio tenía un método para dar permisos al usuario NetworkService para acceder a las colas: 



        private void SetPermissionToQueue(string queuePath)
        {
            //Creamos la lista de acceso
            AccessControlList accessControlList = new AccessControlList();


            //Creamos una entrada para la lista
            AccessControlEntry entry = new AccessControlEntry();
            entry.Trustee = new Trustee(<nombre del usuario al que hay que dar permisos>);
            entry.StandardAccessRights = StandardAccessRights.All;
            entry.GenericAccessRights = GenericAccessRights.All;
            entry.EntryType = AccessControlEntryType.Allow;


            //Agregamos la entrada a la lista
            accessControlList.Add(entry);


            //Asignamos la lista de acceso a la cola
            MessageQueue queue = new MessageQueue(queuePath);
            queue.SetPermissions(accessControlList);
        }



Parece sencillo, no ? Lanzado este código todo parecía que estaba bien. Reviso la seguridad de las colas en las herramientas administrativas y todo perfecto; el usuario NetworkService estaba incluido en la lista de usuarios con permisos y con todos los permisos que yo le había dado…


Pero no funciona. Arranco el servicio y éste no puede acceder a las colas; acceso denegado. Y Aquí empieza lo raro.


Si desde las herramientas administrativas de MSMQ accedo a la pestaña de seguridad y simplemente desmarco y marco cualquier opción, dejando todo igual…es decir, sin tocar nada, todo empieza a funcionar!!!!


Perfecto, ya tengo la solución. Cada vez que instale mi aplicacíón sólo tengo que ir ahí y desmarcar-marcar 🙂


La solución? Pues usando otra sobrecarga de «SetPermissions» conseguí echarlo a funcionar.



        private void SetPermissionToQueue(string queuePath)
        {
               MessageQueue queue = new MessageQueue(queuePath);


              queue.SetPermissions(<nombre del usuario al que hay que dar permisos>, MessageQueueAccessRights.FullControl, AccessControlEntryType.Allow);         


        } 


Con esto más sencillo y sobre todo, funciona 🙂


 

Ibon Landa

bon Landa lleva más de 15 años dedicado al desarrollo de software. Durante este tiempo ha trabajado en diferentes empresas en las cuáles ha podido trabajar en diferentes entornos y tecnologías. Actualmente está focalizado principalmente en tareas de desarrollo, arquitectura, en las herramientas del ciclo de vida y en todo lo relacionado con la plataforma de Cloud Computing Microsoft Azure, área en el que ha sido reconocido como MVP. Participa de forma activa en la comunidad, escribiendo su blog, manteniendo un portal sobre Microsoft Azure y colaborando con Microsoft y grupos de usuarios en eventos de formación, talleres y giras de producto.

4 comentarios en “¿ Un bug estableciendo las seguridad en las colas MSMQ ?”

  1. Hola shadow,

    La sobrecarga de ese método ya viene con el Framework de .NET. No es necesario hacer una sobrecarga adicional, simplemente usar el método de la segunda manera que comento en lugar de la primera.

  2. Hola Ibon,

    Quiero compartirte que yo tengo un problema similar al momento de abrir el Host, marca un error con mensaje «There was an error opening the queue. Ensure that MSMQ is installed and running, the queue exists and has proper authorization to be read from. The inner exception may contain additional information.»

    Lo raro es que he verificado la seguridad, soy propietario de ese objeto de la cola, tengo permisos de administrador, la cola verifico que exista sino la creo en código (y la crea la primera vez que lo ejecuto). Y los servicios de MSMQ estan corriendo. La plataforma es Windows Vista.

    El ejemplo es el «SimpleMessageQueue» del libro Learning WCF de Michele Leroux Bustamante. Es buen código de ejemplo sin embargo tengo esa excepción y no lo he podido ver funcionar. Tendrás algún tip que tenga que ver con Vista? O tus sugerencias en general.

    Saludos, gracias de antemano y Felicidades por tu blog

  3. Hola Pedro,

    Alguna vez ya me he encontrado con ese error pero ahora mismo no recuerdo la causa exacta.

    A parte de la seguridad revisa también el fichero de configuración para ver si apunta correctamente a la cola que quiere abrir.

    Si me pasas el ejemplo con el que estás probando le eche un ojo a ver.

Responder a anonymous Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *