Pregunta

He usado actualmente MAF para crear un complemento modelo en el que los complementos se cargan en un dominio de aplicación (permisos de Internet) restringido. Esto significa que el complemento no se puede llamar a nuestra base de datos, que es lo que queremos en la mayoría de los casos, ya que queremos evitar complemento autores ejecutan las consultas directamente contra el PP.

Queremos que utilizan algún tipo de API de acogida que les permita realizar ciertas tareas (por ejemplo, ejecutar consultas o enviar mensajes de correo electrónico muy específico). ¿Puede alguien decirme la mejor manera de hacer esto?

he tratado de configurar el dominio de aplicación para el tratamiento de la asamblea que contiene la API de acogida como una confianza plena asamblea durante la ejecución de los complementos en forma restringida, sin embargo sigo teniendo SecurityExceptions cuando intento abrir una conexión db.

¿Fue útil?

Solución

OK, he conseguido solucionar esto. Para las personas que necesitan saber:

  1. Crear un conjunto con el Host API en ella y permitir que el complemento para hacer referencia a él.
  2. Asegúrese de que el ensamblaje que contiene el API Host tiene la [AllowPartiallyTrustedCallers] atributo en el nivel de ensamblado y el nombre fuerte del conjunto.
  3. Asegúrese de que la API Host montaje está registrado con el dominio de aplicación como una confianza montaje completo (ver http://blogs.msdn.com/b/shawnfa/archive/2005/08/08/449050.aspx sobre cómo hacer esto).
  4. Asegúrese de que los métodos en el Host API que requieren permisos de escalada están decoradas con el [SecuritySafeCritical] atributo (.NET 4).
  5. La demanda de plena confianza en el inicio de cada método necesita permisos de escalada y luego retira la demanda inmediatamente después. El código siguiente proporciona un método que toma un delegado que se ejecuta en plena confianza.

    /// <summary>
    /// Runs the supplied delegate using full trust
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="func"></param>
    /// <returns></returns>
    private static T RunWithFullTrust<T>(Func<T> func)
    {
        //NOTE: This line grants the method full trust
        new PermissionSet(PermissionState.Unrestricted).Assert();
    
    
    
    T result = func();
    
    
    //Undo the grant for full-trust!
    CodeAccessPermission.RevertAssert();
    
    
    return result;
    
    }

Además, antes de cargar los complementos asegurar que el Host API se carga en el dominio de aplicación restringida. Esto va a evitar excepciones donde el Host API montaje no se puede encontrar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top