正在加载中...
.net CLR运行环境影响session有效期(登录频繁超时退出)问题解决方法
也许你在windows+IIS+ASP/ASP.NET开发过程中遇到session很快超时退出的问题,会员刚登录不久,很快就退出,很是烦人。经过仔细的研究,万维景盛工程师发现,session登录频繁超时与进程程序池.net CLR运行环境有关。通过查看错误日志发现,每次退出,都会出现以下错误日志:
.NET Runtime version 4.0.30319.0 - 由于下面的环境变量设置,加载了针对旧版本的 CLR 而设计的探查器。在许多情况下,较旧的探查器将继续工作,但如果您遇到了问题,请考虑升级探查器或更改此环境变量的设置。有关如何使用此环境变量以及与之相关的风险的信息,请参考相关文档。环境变量设置: ProfAPI_ProfilerCompatibilitySetting=EnableV2Profiler。探查器 CLSID:“{9598F6D3-9CAA-46BF-A995-0AA1D18A547A}”。 进程 ID (十进制): 5688。消息 ID: [0x2518]。
而相关的程序并不是.net开发,那么怎么会存在.net运行时错误呢?
原来,这是因为进程程序池用到了.net托管,将asp运行有.net环境中,随着.net报错,asp程序也会故障。
看提示,4.0的探测器提示已设置为2.0,尝试将程序池改为.net CLR 2.0,观察一段时间,发现session登录超时问题消失。
.NET Framework (current version)
.NET Framework 2.0 版分析 API 仍可按照 2.0 版文档中所述的方式在 .NET Framework 4 中正常工作。
COMPLUS_ProfAPI_ProfilerCompatibilitySetting
可以将 COMPLUS_ProfAPI_ProfilerCompatibilitySetting 环境变量设置为下表所示的三个值之一。
![]() |
---|
设置 | CLR 行为 |
---|---|
EnableV2Profiler | 加载和激活 2.0 版探查器。 |
DisableV2Profiler | |
PreventLoad | 无论为其编写探查器的 .NET Framework 的版本如何,都不会加载任何探查器。 |
详细的行为如下:
EnableV2Profiler
DisableV2Profiler(默认值)
.NET Framework 4 CLR 加载探查器,并通过调用探查器的 IUnknown::QueryInterface 方法查找 ICorProfilerCallback3 接口来确定探查器的版本。
如果探查器实现 ICorProfilerCallback3,则探查器为 .NET Framework 版本 4 探查器,并且 CLR 将继续使用它。
PreventLoad
例如,若要指示 CLR 加载 .NET Framework 2.0 探查器,请打开命令提示符窗口并键入以下内容:
set COMPLUS_ProfAPI_ProfilerCompatibilitySetting=EnableV2Profiler
![]() |
---|
此兼容性开关只会影响探查器启动路径。 对于附加-加载探查器,运行时对 ICorProfilerCallback3 接口调用 IUnknown::QueryInterface 函数。 如果探查器未实现此接口(此情况适用于 2.0 版探查器),则运行时不会加载探查器,并会在事件日志中记录探查器加载失败项。 |