Medium Trust 阻止您做哪些事情?例如,我已经了解到中等信任会阻止您使用 System.IO.Path.GetTempPath()。还有什么类似的东西?
6 回答
以下是了解和解决信任问题的方法。
1) 在您的 Windows\Microsoft.NET\Framework[YOUR VERSION]\CONFIG 文件夹中搜索文件:
- web.config(这是根配置文件)
- web_mediumtrust.config
- web_hightrust.config
2)改变web.config说
<trust level="Medium" originUrl="" />
3) 试试你的 ASP.NET 应用程序。我的因权限错误而失败。
4) 在 diff 工具(如 WinMerge)中区分 web_mediumtrust.config 和 web_hightrust.config。
5) 一次将设置从高复制到中,看看它们如何影响您的应用程序。在我的例子中,错误消息提到了 ConfigurationPermission,所以很容易诊断。
如果您可以确定 web_mediumtrust.config 文件中阻止您的确切行,那么也许您可以与您的托管公司分享,并有更好的机会解决问题。
更多文档在这里:http:
//msdn.microsoft.com/en-us/library/aa302425.aspx
@Oli,我的应用托管在GoDaddy上,当我开始使用 Lucene.NET 时,我不得不在代码中做一些变通方法。我不得不修改 Lucene.NET 源代码以不使用 GetTempPath 和 System.IO.FileInfo。
谁能确定?这就是为什么您应该在 web.config 中设置信任级别的介质进行开发。
<trust level="Full|High|Medium|Low|Minimal" />
大多数共享主机不使用真正的中等信任环境,因为它限制了一些非常重要的事情。其他人出于自己的肛门原因限制了一些额外的设置。
您可以做的最好的事情是询问您的主机他们为 ASPNET 使用了哪些设置。询问他们使用的信任级别的规格。找出内存限制。获得这些详细信息后,您应该能够在本地级别复制该场景。
如果他们不告诉您,只需将您的应用程序设置为以中等信任度运行,但如果他们使用修改后的信任级别,它(显然)不一定工作。
一般来说,我遇到的唯一问题是:如果您正在推送程序集,请确保您允许部分受信任的请求(它是一个程序集元标记),否则您将无法使用它们。
以下是GoDaddy 的 Medium Trust 信息页面的摘录:
在中等信任级别下运行的应用程序无法访问注册表,无法访问 Windows 事件日志,并且无法使用 ReflectionPermission(但可以使用 Reflection)。此类应用程序只能与定义的网络地址范围进行通信,并且文件系统访问仅限于应用程序的虚拟目录层次结构。
使用中信任级别可防止应用程序访问共享系统资源并消除应用程序干扰的可能性。添加 OleDbPermission 和 OdbcPermission 允许应用程序使用这些数据提供者来访问数据库。WebPermission 被修改为允许出站 http 和 https 流量。
这可能与您必须与主机一起解决的问题完全对应(除非您使用 GoDaddy),但这是一个典型示例。
确保任何第三方库/框架(想到城堡)都是以中等信任度构建(或可以构建)的。
system.runtime.serialization 库在中等信任度下完全不可用。
我围绕这个进行了 json 序列化/反序列化的编码,并找到了困难的方法。花了一周的时间才让一位同事确认应该归咎于中等信任限制。结果,我最终更换了托管公司。
在中等信任度下,至少在我的主机上,P/INVOKE 调用不可用,即[DLLImport]
用于调用 COM 组件是行不通的。
-Edoode