【问题标题】:db4o running in asp.net Medium Trust environmentdb4o 在 asp.net 中信任环境中运行
【发布时间】:2009-06-29 09:04:46
【问题描述】:

我正在使用 db4o 的嵌入式客户端/服务器版本(我调用 OpenServer() 而不是 OpenFile() 方法),以便我可以托管一个 asp.net 网站,该网站将有多个用户同时读取和写入数据库。唯一的问题是我们使用的虚拟主机是一个中等信任的环境,所以它会抛出一个错误,指出程序集不支持部分受信任的调用者......

想知道是否有人对如何使其工作有任何建议。谢谢!

:: 更新 ::

我已经使用 [AllowPartiallyTrustedCallers] 属性重新编译了 db4o dll,现在我收到以下特定错误:

System.TypeInitializationException 未被用户代码处理 Message="'DataObjecten.db4oManager' 的类型初始化程序引发了异常。" TypeName="DataObjecten.db4oManager" 内部异常:System.Security.SecurityException Message="请求'System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'类型的权限失败。" 来源="Db4objects.Db4o" 堆栈跟踪: 在 Db4objects.Db4o.Internal.Platform4.AddShutDownHook(PartialObjectContainer 容器) 在 Db4objects.Db4o.Internal.PartialObjectContainer.Initialize1(IConfiguration 配置) 在 Db4objects.Db4o.Internal.PartialObjectContainer.Open() 在 Db4objects.Db4o.Internal.IoAdaptedObjectContainer..ctor(IConfiguration 配置,字符串文件名) 在 Db4objects.Db4o.Internal.ObjectContainerFactory.OpenObjectContainer(IConfiguration 配置,字符串数据库文件名) 在 Db4objects.Db4o.Db4oFactory.OpenFile(IConfiguration 配置,字符串数据库文件名) 在 Db4objects.Db4o.Db4oFactory.OpenServer(IConfiguration 配置,字符串数据库文件名,Int32 端口,INativeSocketFactory socketFactory) 在 Db4objects.Db4o.Db4oFactory.OpenServer(IConfiguration 配置,字符串数据库文件名,Int32 端口) 在 DataObjecten.db4oManager..cctor() 内部异常:

【问题讨论】:

  • 刚刚在我的帖子中添加了一个更新...仍在尝试看看我是否可以围绕这个...
  • 你有没有设法解决这个问题?我也在考虑使用 db4o,但如果我不能在中等信任中使用它,我会担心它 - 不是在中等信任 ATM 中,但你永远不知道......
  • 不,从来没有成功过。不过,我很快就会重温这一点。希望会有解决方案。

标签: asp.net db4o medium-trust


【解决方案1】:

我不知道这是否可行,但您可以尝试编写一个包装 DLL,将 AllowPartiallyTrustedCaller 设置为 true,并将所有调用传递给 db4o DLL。

由于 db4o 是开源的,您当然可以下载并重新编译 AllowPartiallyTrustedCaller 并将其设置为 true。

This 线程表明这可能行不通。

【讨论】:

  • 嘿,同样,感谢您的回复 - 查看 db4o 的源代码,我发现他们已经在使用 dll 上的 APTC 属性对其进行编译。嗯……好像没什么效果。也许是因为我使用了客户端/服务器模式。我将尝试使用 OpenFile() 方法而不是 OpenServer() 并查看是否得到相同的安全异常。如果是这样,也许我会尝试你的包装建议。
【解决方案2】:

我也遇到过这个问题,在中等信任的 Web 应用程序环境中,db4o 似乎无法在客户端/服务器模式下工作。
This project for ASP.NET Providers using db4o 似乎证实了这一点。
它指出 db4o 依赖于反射和非托管代码,这两种代码都在中等信任中被禁止。
我认为你唯一的希望就是遵循他们的建议并找到一个共享的提供者,让你可以完全信任地运行你的代码。
非常令人失望,因为我很喜欢使用 db4o,而这只是破坏了几个星期的工作。

【讨论】:

  • 确实,db4o 确实依赖于反射(关于非托管代码,我们曾经直接依赖于本地代码,但现在不再依赖)。 AFAIK(我不是安全专家),APTC 属性应该足以允许 db4o 在中等可信环境中使用。无论如何,由于我们还有一个与此主题相关的未决问题 (tracker.db4o.com/browse/COR-51),我将在下次会议上讨论这个问题。
【解决方案3】:

我发现 db4o 不能在中等信任环境中工作。任何正在寻找可嵌入或启用服务器并可在中等信任环境中使用的 nosql 解决方案的人都应该看看 ravendb.net - 解决了我所有的问题......(必须使用 munin 托管存储引擎)。

与对象数据库 (db4o) 类似,但没有令人头疼的问题,而且用途更广泛。此外,还可以通过 JSON/HTTP 处理链接或标准查询等内容......

最大的好处是:

通过 Lucene.NET 进行全文搜索 分片/自动分片 复制(广域网/局域网) LINQ 索引/自动索引 出色的性能(比 db4o 快得多) 原生于 .NET 符合酸 交易 多租户 以客户端/服务器模式运行或嵌入 能够在中等信任下运行

【讨论】:

  • 如果您要标记答案,请说明原因。
猜你喜欢
  • 1970-01-01
  • 2010-10-22
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多