0

我必须说到目前为止,我可能只是非常幸运,因为我从未遇到过与以中等信任度运行的网站相关的问题。我只开发过 Intranet 应用程序,或者碰巧使用过完全信任的托管公司。但是我被要求用于最近的项目的主机以中等信任度运行,所以我试图让我的应用程序运行它。几个问题 - 我在 Windows XP 上开发。那里的 IIS 可以配置为中等信任(更易于调试)和/或它是 web.config 设置吗?关于这个主题有大量的信息,而且学习曲线很陡峭。

其次,经过大量的摆弄和删除代码,我认为这一行导致了权限错误:

对于 Type.GetFields 中的每个 FieldInfo 作为 FieldInfo(BindingFlags.Instance 或 BindingFlags.NonPublic 或 BindingFlags.Public)

谁能澄清这是一个可能的候选人,尤其是。那个非公共标志?这是复制和粘贴的代码(Coding Horror 强调了这样做的风险)所以我从来没有真正想过。我假设循环是通过对象中的每个字段,包括公共和非公共字段——我已经读过,受保护的字段是禁止使用对中等信任进行反射的。

干杯,罗布。

4

3 回答 3

3

抱歉,与 NonPublic 的反射等同于完全信任。

如果不知何故我没有完全信任但有 NonPublic 反射,我可以利用它来改变我自己的代码信任级别(可写字符串等)。

于 2009-06-24T01:12:28.153 回答
2

是的,可以将 XP 上的网站配置为以中等信任度运行:

在 <system.web> 部分添加以下内容:

<!-- Case is important: it's Medium, not medium -->
<trust level="Medium"/>

而你在那里。

您可能会发现大多数主机在略微提升的“中等”信任设置中运行他们的网站,除了默认设置之外还有一些额外的权限 - 他们的技术人员应该能够告诉您他们有什么不同(如果有的话)。

如果你看看:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\web_mediumtrust.config

您将看到应用的默认设置。

反射是 Medium 信任中受限的关键内容之一 - 来自GetFields页面上的备注:

如果请求的字段是非公共的并且调用者没有 ReflectionPermission 来反映当前程序集之外的非公共对象,则此方法返回一个空引用(在 Visual Basic 中为 Nothing)。

由于这有可能返回 null,因此您可能应该在开始迭代之前检查 null,或者在使用之前检查 FieldInfo 是否为 null/nothing。

于 2009-06-24T01:08:00.643 回答
0

我将把它标记为已关闭,因为没有人回答,而且事实证明它太有问题了,无法尝试重新编码。该程序写得还不错,但在对象映射中大量使用了反射,老实说,找到支持完全信任的托管公司更容易。

于 2009-06-23T21:36:53.393 回答