Frage

Ich habe zur Zeit MAF verwendet, um ein Add-In-Modell zu erstellen, in dem die Add-In geladen wird in einer eingeschränkten AppDomain (Internet Erlaubnis). Dies bedeutet, dass die Add-In kann unsere Datenbank nicht nennen, das ist das, was wir in den meisten Fällen wollen wir Add-In-Autoren verhindern wollen alle Fragen direkt an der db ausgeführt wird.

Wir wollen, dass sie irgendeine Form von Host-API verwenden, die sie bestimmte Aufgaben ausführen können (z sehr spezifische Anfragen oder schicken E-Mails laufen). Kann jemand mir die beste Art und Weise sagen, dies zu tun?

Ich habe den AppDomain Setup versucht, die Versammlung zu behandeln, die den Host-API als volles Vertrauen enthält Baugruppe während der Add-In in einer eingeschränkten Weise ausgeführt wird, aber ich noch SecurityExceptions, wenn ich versuche, eine DB-Verbindung zu öffnen.

War es hilfreich?

Lösung

OK, ich habe es geschafft, dieses Problem zu lösen. Für Menschen, die wissen müssen:

  1. eines mit dem Host-API in dem Erstellen der Montage und ermöglicht der Add-in es zu verweisen.
  2. Stellen Sie sicher, die Assembly, die die Host-API enthält, hat die [AllowPartiallyTrustedCallers] Attribut auf Baugruppenebene und starken Namen der Montage.
  3. Sicherstellen, dass die Host-API-Assembly mit dem AppDomain als volles Vertrauen registriert ist Anordnung (siehe http://blogs.msdn.com/b/shawnfa/archive/2005/08/08/449050.aspx , wie dies zu tun).
  4. Stellen Sie sicher, die Methoden auf dem Host-API, die eskaliert Berechtigungen erforderlich sind mit der [SecuritySafeCritical] Attribut (.NET 4).
  5. Nachfrage volles Vertrauen zu Beginn jeder Methode Sie eskalierte Berechtigungen benötigen und dann die Nachfrage gerade nach entfernen. Der folgende Code stellt eine Methode, die einen Delegierten erfolgt, die in voller Vertrauenswürdigkeit ausgeführt wird.

    /// <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;
    
    }

Auch vor all Add-In zu laden sicherzustellen, dass der Host-API in den geschützten AppDomain geladen wird. Dies würde Ausnahmen vermeiden, in denen die Host-API-Assembly nicht gefunden werden kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top