我有一个.NET 3.5桌面应用程序,每当它所在的测试机器不在办公室时,它就会显示功能的周期性慢速下降。
我设法在没有互联网连接的办公室里的机器上复制错误,但只有当我使用ANTS性能分析器时,我才能更清楚地了解正在发生的事情。禁用Windows上的应用程序的证书吊销检查
在ANTS中,当NHibernate试图加载System.Data.SqlServerCE.dll程序集时,我看到一个“等待同步”最多需要16秒,这相当于应用程序中可以看到的延迟。
如果我立即再次尝试这个动作,它将毫不迟疑地工作,但如果我将它放置了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。
SQLServerCE dll被NHibernate动态加载,我不知道它是动态的事实可能是为什么设置不起作用,但我不知道如何检查。
任何人都可以提供建议,为什么配置设置可能无法正常工作?
或者还有另外一种方法可以禁用应用程序级别的检查,也许我可以使用CAS策略设置应用程序在安装时设置异常吗?
或者有什么我可以在应用程序中更改信任级别或类似的东西?
你能在GAC在服务器上安装sqlserverCE组装?,当程序集安装在GAC中时,这些程序集在加载时未被验证,只有在安装期间才会在GAC中进行检查,请查看以下文章:http://msdn.microsoft.com/en-us/magazine/cc163610 .aspx – majimenezp
我无法从GAC中的应用程序注册System.Data.SqlServerCe.dll,因为它是私有部署版本。 更改为桌面版本允许从GAC加载,但它对性能没有任何影响。 我的ProcessMonitor看到其他SQLCE的DLL(如sqlceer40EN.dll)被装入了(从SQL Server CE安装目录),并在第一的这些加载我看到15秒的延迟,并呼吁WinTrustVerify,但他们不能在GAC中注册,因为他们不是.NET dll,所以他们为什么要进行CRL检查? –
这似乎是无法设置超时o禁用证书吊销,但检查此页面:[修复应用程序启动缓慢](http://rusanu.com/2009/07/24/fix-slow-application-startup-由于代码签名验证/)这个家伙解释如何在Windows注册表中设置请求中的超时,如果您设置一个较低的值,那么会喜欢禁用。 – majimenezp