【问题标题】:Is System.Web.Caching.Cache expected to work in sandbox?System.Web.Caching.Cache 是否有望在沙盒中工作?
【发布时间】:2012-06-25 00:36:55
【问题描述】:

我正在尝试在沙盒中运行一段代码。它失败了,问题来自使用缓存的代码部分。

按预期工作的情况:

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

该程序集不允许部分受信任的调用者。

是否与此问题有关,或者缓存不打算在完全信任以外的场景中使用?

【问题讨论】:

    标签: c# sandbox code-access-security partial-trust


    【解决方案1】:

    使用部分信任运行的代码内部缓存的一种可能方法是将缓存对象移到插件外部。适配器模式可用于使插件仍然能够在缓存中读取和写入数据,同时由调用者在完全信任的上下文中管理缓存。

    如果其他人有兴趣,我说明了the original issuea project published on CodePlex 中的解决方案。

    【讨论】:

      猜你喜欢
      • 2022-11-02
      • 2018-03-23
      • 1970-01-01
      • 1970-01-01
      • 2015-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-07
      相关资源
      最近更新 更多