制限されたAppDomainsのアドインは、エスカレートされたサービスにどのようにアクセスする必要がありますか

StackOverflow https://stackoverflow.com/questions/4148471

  •  30-09-2019
  •  | 
  •  

質問

現在、MAFを使用して、アドインモデルを作成して、アドインが制限されたアプリドメインにロードされています(インターネット許可)。これは、アドインがデータベースを呼び出すことができないことを意味します。これは、DBに対して直接クエリを実行するアドイン著者を防ぐため、ほとんどの場合、私たちが望むものです。

特定のタスクを実行できるようにするホストAPIを何らかの形で使用してほしい(例:非常に特定のクエリを実行したり、電子メールを送信したりするなど)。誰かがこれを行うための最良の方法を教えてもらえますか?

ホストAPIを含むアセンブリを完全な信頼アセンブリとして扱うようにAppDomainをセットアップしようとしましたが、Add-Insを制限された方法で実行していますが、DB接続を開こうとするとSecurityExceptionsを取得しました。

役に立ちましたか?

解決

わかりました、私はこれを解決することができました。知る必要がある人のために:

  1. ホストAPIを含むアセンブリを作成し、アドインを参照できるようにします。
  2. ホストAPIを含むアセンブリには、アセンブリレベルで[Plartivally -strustedCallers]属性があり、アセンブリの強い名前があることを確認してください。
  3. ホストAPIアセンブリが完全なトラストアセンブリとしてAppDomainに登録されていることを確認してください(参照 http://blogs.msdn.com/b/shawnfa/archive/2005/08/08/449050.aspx これを行う方法について)。
  4. エスカレートされたアクセス許可を必要とするホストAPIのメソッドが装飾されていることを確認してください SecuritySafeCritical 属性(.NET 4)。
  5. 各メソッドの開始時に完全な信頼を要求します。エスカレーションされた権限が必要で、その後すぐに需要を削除します。以下のコードには、完全に信頼できるデリゲートを使用する方法が提供されます。

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

また、アドインをロードする前に、ホストAPIが制限付きアプリドメインにロードされるようにします。これにより、ホストAPIアセンブリが見つからない例外が回避されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top