WCF, MSMQ y las ACL

EL PROBLEMA

Llevo un tiempo largo involucrado en un proyecto bastante grande,o muy grande, depende de cómo se mire que incorpora el uso de WCF sobre MSMQ, algo que por cierto me encanta y que arquitectónicamente resuelve multitud de problemas, aunque también tiene su chicha y de la que es posible que algún día hable en este blog. El caso es que claro está una de las partes del proyecto involucra el desplegado, y una de las fases de este desplegado es la asignación de permisos a las colas de MSMQ que serán usadas por los servicios de Windows Comnunication Foundation, para los que ya conozcáis System.Messaging diréis que no tiene mayor misterio y que basta con crear un Truste y una AccessControlEntry y asignárselo a la cola, vamos algo como lo que sigue

using System;

using System.Collections.Generic;

using System.Text;

using System.Messaging;

namespace ConsoleApplication1

{

    class
Program

    {

        static
void Main(string[] args)

        {

            //Creamos la lista de acceso

            AccessControlList accessControlList = new
AccessControlList();

 

            //Creamos una entrada para la lista

            AccessControlEntry entry = new
AccessControlEntry();

            entry.Trustee = new
Trustee(«EL_USUARIO»);

            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(«PATH_MSMQ_QUEUE»);

            queue.SetPermissions(accessControlList);

        }

    }

}

 

El caso ‘extraño’ es que la asignación de permisos no se realiza realmente, ya que el servicio daba una excepción de seguridad confirmando que no se tenía acceso a la cola a la que intentaba acceder, sin embargo en la lista ACL de la misma los permisos estaban establecidos. ¿Qué pasa? Más extraño resulta el caso si dentro de la lista de ACL dónde puedes ver los permisos que se han asignado los deschequeas y los vuelves a chequear entonces todo funciona de forma correcta.

 

LA SOLUCIÓN

La solución hay que otorgársela a Ibon, una persona muy habitual a Geeks y que seguramente, si Rodrigo consigue de una vez crearle un blog, escribirá pronto esta y otras muchas anécdotas por estos lares, que consiguió encontrar por la red una persona a la que le ocurrió lo mismo y se dio cuenta de la solución, básicamente agregar unas líneas que resolvían el problema

 

MessageQueue m = new
MessageQueue(MSMQInstaller.Path);

            m.SetPermissions(«SYSTEM», MessageQueueAccessRights.FullControl, AccessControlEntryType.Allow);

 

Curioso verdad???? Bueno… hay queda por si a otro le pasa lo mismo….

 

Saludos

Unai