45

我开始使用实体框架代码优先和 Unity 开发一个新的 MVC 应用程序以进行依赖注入。我使用了 EF5 和 Unity,因为我认为它们应该在 Medium Trust 中工作。但是,当我将<trust level="Medium" />标签放入我的 . 时web.config,我开始收到反射权限异常。

似乎每当我超出使用诸如System.Data.SqlClientADO.net 之类的内置东西时,我总是在 Medium Trust 中遇到问题。自动映射器:失败。NHibernate:失败。MySQL:失败。EF5 代码优先:失败。国际奥委会:失败。

我只是在追逐一个白日梦吗?是否有可能使用将在中等信任下运行的现代技术来实现架构良好且可测试的 Web 应用程序?

在虚拟机/虚拟服务器/云计算时代(甚至一些共享主机会将您的应用程序池设置为完全信任),有没有人发现为中等信任进行开发值得付出努力?

4

2 回答 2

69

ASP.NET 团队的官方立场是 Medium Trust 已过时。这意味着几件事:

  • 我们正在自动解决所有报告给我们的与中等信任相关的错误,即“无法修复”。
  • 我们已经向托管商提供了指导,他们应该从 Medium Trust 迁移并改用适当的操作系统级隔离 ( http://support.microsoft.com/kb/2698981 )。
  • 我们正在从我们开发的框架(MVC、WebAPI、SignalR 等)中移除对中等信任的支持。展望未来,基于这些框架构建的应用程序将需要完全信任。

此处,上述术语“中信任”是指 ASP.NET 中的所有非完全信任配置,包括使用内置信任级别(最小、低、中、高)或任何自定义信任级别。

2015 年 5 月 26 日编辑:整个 .NET Framework 已弃用部分信任,建议客户不要将其作为安全边界。来自 MSDN

.NET Framework 中的代码访问安全性不应用作部分受信任代码的安全边界,尤其是未知来源的代码。我们建议不要在未采取替代安全措施的情况下加载和执行来源不明的代码。

于 2013-06-20T15:57:23.423 回答
8

一般来说,所有需要深度反射的东西都不能在 Medium Trust 上运行

在你的情况下:

Automapper:使用反射来发现匹配的属性和内存流来克隆它们(有一个版本实际上在中等信任下工作,但有一些限制)

NHIbernate:使用反射发射来允许延迟加载,因为 NH 中的延迟加载是由代理实现的(为了避免这种情况,您可以禁用延迟加载或使用 NHibernate ProxyGenerator,它是一个有助于预先创建代理的实用程序)

休眠代理生成器

EF:实际上我没有发现 EF 和 Medium Trust 的大问题....不要序列化具有关联或集合的对象

IoC:IoC 是反射的杀手级应用 :) 您可以尝试适用于 Medium Trust 的 AutoFac

AutoFac

一般来说,中等信任度是一个很大的限制……但这完全取决于您正在从事的项目类型。还可以考虑使用一些完全信任托管,例如 Arvixe

希望这可以帮助

于 2013-06-05T17:37:11.277 回答