试图为中信托开发一个失败的原因?

时间:2013-05-31 04:31:18

标签: asp.net asp.net-mvc medium-trust

我开始开发一个新的MVC应用程序,其中实体框架代码优先,Unity用于依赖注入。我使用EF5和Unity,因为我认为他们应该在Medium Trust中工作。但是,当我在<trust level="Medium" />中抛出web.config标记时,我开始获得反射权限异常。

似乎每当我超越使用像System.Data.SqlClient ADO.net这样的内置内容时,我总是会遇到Medium Trust中的问题。自动映射器:失败。 NHibernate:失败。 MySQL:失败。 EF5代码优先:失败。国际奥委会:失败。

我只是在追逐梦想吗?是否有可能使用将在Medium Trust中运行的现代技术来实现架构良好且可测试的Web应用程序?

在虚拟机/虚拟服务器/云计算时代(甚至一些将您的应用程序池设置为完全信任的共享主机)是否有人发现为中型信任开发是值得的?

2 个答案:

答案 0 :(得分:68)

ASP.NET团队的官方立场是Medium Trust已经过时。这意味着一些事情:

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

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

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

  

.NET Framework中的代码访问安全性不应该用作   具有部分可信代码的安全边界,尤其是代码   来历不明。我们建议不要加载和执行代码   没有采取其他安全措施的未知来源   的地方。

答案 1 :(得分:8)

一般而言,需要以深度方式反思的所有内容都无法在中等信任

上运行

在你的情况下:

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

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

Nhibernate ProxyGenerator

EF:实际上我没有发现EF和中等信任的重大问题......是不是用关联或集合序列化对象

IoC:IoC是反射的杀手应用程序:)您可以尝试使用适用于中等信任的AutoFac

AutoFac

一般来说,中等信任是一个很大的限制......但这一切都取决于你正在做什么样的项目。 还要考虑使用一些像Arvixe

这样的完全信任托管

希望这有帮助