22

我有一个 .NET 3.5 桌面应用程序,每当它所在的测试机器不在办公室时,它的功能就会周期性地变慢。
我设法在没有互联网连接的办公室机器上复制了错误,但只有当我使用 ANTS 性能分析器时,我才能更清楚地了解正在发生的事情。

在 ANTS 中,我看到“等待同步”最多需要 16 秒,这与我在 NHibernate 尝试加载 System.Data.SqlServerCE.dll 程序集时在应用程序中看到的延迟相对应。
如果我立即再次尝试该操作,它将不会延迟,但如果我将其放置 5 分钟,那么下次尝试再次加载时会很慢。

从我目前的研究来看,这似乎是因为 SqlServerCE dll 已签名,因此系统正在尝试连接以获取证书吊销列表并超时。
禁用 Internet 选项 LAN 设置中的“自动检测设置”设置会使问题消失,禁用“检查发布者证书吊销”也是如此。
但是将部署此应用程序的管理员不会对在每台机器或每个用户的基础上禁用证书检查的想法感到满意,因此我真的需要让 CRL 检查的应用程序级别禁用工作。

.net 2.0 中有一个有据可查的错误,它描述了这种行为,并提供了一个可能的修复与配置文件元素。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <runtime>
        <generatePublisherEvidence enabled="false"/>
    </runtime>
</configuration>

但是,即使我使用的是 .net 3.5,这对我也不起作用。
NHibernate 正在动态加载 SQLServerCE dll,我想知道它是动态的事实是否可能是该设置不起作用的原因,但我不知道如何检查。

任何人都可以就配置设置可能不起作用的原因提供建议吗?
或者是否有另一种方法可以在应用程序级别禁用检查,也许是一个 CAS 策略设置,我可以使用它在安装应用程序时为其设置异常?
或者我可以在应用程序中更改一些东西以提高信任级别或类似的东西?

4

2 回答 2

10

如果要检查每个应用程序的吊销列表,可以在代码中指定:

ServicePointManager.CheckCertificateRevocationList = false;
于 2013-11-12T17:29:45.340 回答
4

在此博客文章(引用另一个来源)中,您有两个选项:禁用 CRL 检查系统范围或每个应用程序:

禁用 CRL 检查机器范围的控制面板 -> Internet 选项 -> 高级 -> 在安全下,取消选中检查发布者的证书吊销选项

禁用特定 .Net 应用程序的 CRL 检查 请参阅此 Microsoft 知识库文章:http: //support.microsoft.com/kb/936707

于 2013-11-09T19:46:34.970 回答