我开始开发一个新的MVC应用程序,其中实体框架代码优先,Unity用于依赖注入。我使用EF5和Unity,因为我认为他们应该在Medium Trust中工作。但是,当我在<trust level="Medium" />
中抛出web.config
标记时,我开始获得反射权限异常。
似乎每当我超越使用像System.Data.SqlClient
ADO.net这样的内置内容时,我总是会遇到Medium Trust中的问题。自动映射器:失败。 NHibernate:失败。 MySQL:失败。 EF5代码优先:失败。国际奥委会:失败。
我只是在追逐梦想吗?是否有可能使用将在Medium Trust中运行的现代技术来实现架构良好且可测试的Web应用程序?
在虚拟机/虚拟服务器/云计算时代(甚至一些将您的应用程序池设置为完全信任的共享主机)是否有人发现为中型信任开发是值得的?
答案 0 :(得分:68)
ASP.NET团队的官方立场是Medium Trust已经过时。这意味着一些事情:
此处,上面的术语“中等信任”是指ASP.NET中的所有非完全信任配置,包括使用内置信任级别(最小,低,中,高)或任何自定义信任级别。
编辑2015年5月26日: .NET Framework作为一个整体已弃用部分信任,建议客户不要将其作为安全边界。 From MSDN:
.NET Framework中的代码访问安全性不应该用作 具有部分可信代码的安全边界,尤其是代码 来历不明。我们建议不要加载和执行代码 没有采取其他安全措施的未知来源 的地方。
答案 1 :(得分:8)
一般而言,需要以深度方式反思的所有内容都无法在中等信任
上运行在你的情况下:
自动映射:使用反射来发现匹配的属性和内存流来克隆它们(有一个版本可以在中等信任中实际工作但有一些限制)
NHIbernate:使用反射发射来允许延迟加载,因为NH中的延迟加载是由代理实现的(为了避免这种情况,您可以禁用延迟加载或使用NHibernate ProxyGenerator,它是一个有助于预创建代理的实用程序)
EF:实际上我没有发现EF和中等信任的重大问题......是不是用关联或集合序列化对象
IoC:IoC是反射的杀手应用程序:)您可以尝试使用适用于中等信任的AutoFac
一般来说,中等信任是一个很大的限制......但这一切都取决于你正在做什么样的项目。 还要考虑使用一些像Arvixe
这样的完全信任托管希望这有帮助