制限されたAppDomainsのアドインは、エスカレートされたサービスにどのようにアクセスする必要がありますか
質問
現在、MAFを使用して、アドインモデルを作成して、アドインが制限されたアプリドメインにロードされています(インターネット許可)。これは、アドインがデータベースを呼び出すことができないことを意味します。これは、DBに対して直接クエリを実行するアドイン著者を防ぐため、ほとんどの場合、私たちが望むものです。
特定のタスクを実行できるようにするホストAPIを何らかの形で使用してほしい(例:非常に特定のクエリを実行したり、電子メールを送信したりするなど)。誰かがこれを行うための最良の方法を教えてもらえますか?
ホストAPIを含むアセンブリを完全な信頼アセンブリとして扱うようにAppDomainをセットアップしようとしましたが、Add-Insを制限された方法で実行していますが、DB接続を開こうとするとSecurityExceptionsを取得しました。
解決
わかりました、私はこれを解決することができました。知る必要がある人のために:
- ホストAPIを含むアセンブリを作成し、アドインを参照できるようにします。
- ホストAPIを含むアセンブリには、アセンブリレベルで[Plartivally -strustedCallers]属性があり、アセンブリの強い名前があることを確認してください。
- ホストAPIアセンブリが完全なトラストアセンブリとしてAppDomainに登録されていることを確認してください(参照 http://blogs.msdn.com/b/shawnfa/archive/2005/08/08/449050.aspx これを行う方法について)。
- エスカレートされたアクセス許可を必要とするホストAPIのメソッドが装飾されていることを確認してください SecuritySafeCritical 属性(.NET 4)。
各メソッドの開始時に完全な信頼を要求します。エスカレーションされた権限が必要で、その後すぐに需要を削除します。以下のコードには、完全に信頼できるデリゲートを使用する方法が提供されます。
/// <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アセンブリが見つからない例外が回避されます。
所属していません StackOverflow