2

サンドボックスでコードを実行しようとしています。失敗し、問題はキャッシュが使用されているコードの部分に起因します。

期待どおりに動作するケース:

public void Demo()
{
    // Verify that the code is running in a sandbox: the next line is expected to
    // fail, since the sandbox doesn't have enough I/O privileges to access H:\.
    File.WriteAllText(@"H:\Hello.txt", "Hello");
}

つまり、「許可の要求 […] FileIOPermission […] に失敗しました」という例外がスローされます。

コードをデータベースへの呼び出しに置き換えると、やはり結果が期待されます。アプリは、十分な権限がないと文句を言っています。

要求された特権を追加すると、コードは例外なく実行されます。

失敗するケース:

前の方法を次のように置き換えると:

public void Demo()
{
    Cache cache = HttpRuntime.Cache;
    File.WriteAllText(@"H:\Hello.txt", "Hello");
}

それは動作を停止します: 不十分な I/O パーミッションについて不平を言う予想される例外の代わりに、スローされるものは次のSystem.Security.SecurityExceptionとおりです。

そのアセンブリは、部分的に信頼された呼び出し元を許可しません。

この問題に何か関係がありますか?それとも、キャッシュは完全信頼以外のシナリオで使用することを意図していませんか?

4

1 に答える 1

0

部分信頼で実行されているコード内でキャッシュを使用する方法の 1 つは、キャッシュ オブジェクトをプラグインの外に移動することです。アダプタ パターンを使用すると、完全信頼コンテキストで呼び出し元がキャッシュを管理しながら、プラグインが引き続きキャッシュとの間でデータの読み取りと書き込みを行うことができます。

他の人が興味を持っている場合は、CodePlex で公開されているプロジェクトで元の問題と解決策を説明しました。

于 2012-06-25T15:42:05.153 に答える